在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)
在这里,我迷失了方向,无法访问“令牌”获得未定义:
console.log('token: ' + dataObj.token) //token:undefined
我意识到我正试图点到一个字符串,所以我必须在最后一步做错事。但是,即使我尝试使用JSON.parse或JSON.stringify它仍然似乎没有帮助,并给了我一个'undefined'。
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
任何帮助/反馈都将不胜感激。
答案 0 :(得分:4)
你不应该嵌入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);
没有额外的解码步骤,不用担心转义报价等等......
答案 1 :(得分:1)
首先,这是无效的JSON:
$someJSONObject = '{token:"randomtoken",signature:"signature"};
您需要将密钥括在"
中。更好的是,让PHP做到:
$someJSONObject = json_encode(array(
'token' => 'randomtoken',
'signature' = 'signature'
));
然而,您正在做的非常奇怪的事情是尝试在另一个JSON字符串中包含一串JSON。温和地说,这是令人困惑的。
相反,将数据作为数组传递给my_response
,让json_encode
对整个数据进行编码。
$someJSONObject = array(
'token' => 'randomtoken',
'signature' = 'signature'
);
my_response($_GET['format'], $response);
在您的Javascript中,您应该能够phpObj.data.token
。
答案 2 :(得分:0)
我有一个类似的代码但是,我的json看起来像这样
{ "token" [ "token": randomtoken, "signature": signature] }
然后我操纵这样:
var datos = JSON.parse(JSON);
for(var something in datos){
var objeto = datos[something];
alert('token: ' + objeto.token);
}
抱歉,我的英文不好