在 PHP 中,我有一个像这样的 JSON 对象(即使在这里也不确定它的格式是否正确以及我是否正确传递了它):
$someJSONObject = '{token:"randomtoken",signature:"signature"};
并在传递响应之前对其进行编码:
$response['code'] = 1;
$response['status'] = $api_response_code[ $response['code'] ]['HTTP Response'];
$response['data'] = $someJSONObject;
my_response($_GET['format'], $response); //json_encode($response)
然后在我的 JS 中我收到这样的字符串格式:
{ code:1,
status:200,
data: '"{token:\\"randomtoken\\", signature:\\"signature\\"}"' }
我将它解析为一个对象:
phpObj = JSON.parse(body);
这样我就可以访问“数据”:
dataObj = phpObj.data;
这给了我字符串形式的结果:
{token:\"randomtoken\", signature:\"signature\"} //console.log(dataObj)
在这里我迷失了方向,无法访问“ token ”并获得未定义的值:
console.log('token: ' + dataObj.token) //token:undefined
我意识到我正在尝试在字符串中加点,所以我在最后一步一定做错了什么。然而,即使我尝试使用 JSON.parse 或 JSON.stringify 它似乎仍然没有帮助,并给我一个“未定义”。
dataObj = JSON.parse(phpObj.data);
console.log(typeof(dataObj); //string
console.log(dataObj); //"\"{token:\\\"randomtoken\\\", signature:\\\"signature\\\"}\""
console.log(dataObj.token); //token: undefined
或
dataObj = JSON.stringify(phpObj.data);
console.log(typeof(dataObj)); //string
console.log(dataObj); //"\"{token:\\\"randomtoken\\\", signature:\\\"signature\\\"}\""
console.log(dataObj.token); //token: undefined
任何帮助/反馈将不胜感激。
最佳答案
您不应该嵌入 json-in-json。这是相当没有意义的。处理纯粹的 native 数据结构,例如
$response = array(
'code' => 1,
'status' => xxx,
'data' => array
'token' => 'randomtoken',
etc...
)
);
然后对其进行编码:
echo json_encode($response);
JS 端会将其解码回原生 JS 结构,然后您就可以简单地:
alert(response.data.token);
无需额外的解码步骤,无需担心转义引号等...
关于javascript - 将 json 对象从 php 传递到 javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19840042/