将json对象从php传递给javascript
在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我收到这样的string格式:
{ code:1, status:200, data: '"{token:\\"randomtoken\\", signature:\\"signature\\"}"' }
我把它parsing成一个对象:
phpObj = JSON.parse(body);
所以我可以访问“数据”:
dataObj = phpObj.data;
这给了我一个string的结果:
{token:\"randomtoken\", signature:\"signature\"} //console.log(dataObj)
在这里我失去了我的方式,不能访问'令牌'得到一个未定义的:
console.log('token: ' + dataObj.token) //token:undefined
我意识到我试图把一个string,所以我必须在这最后一步做错了什么。 但是,即使我尝试使用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
任何帮助/反馈将不胜感激。
你不应该embeddedjson-in-json。 这是毫无意义的。 处理纯粹的NATIVE数据结构,例如
$response = array( 'code' => 1, 'status' => xxx, 'data' => array 'token' => 'randomtoken', etc... ) );
然后编码:
echo json_encode($response);
JS方将解码回原生的JS结构,然后你只需要:
alert(response.data.token);
没有额外的解码步骤,不用担心转义报价等。
首先,这是无效的JSON:
$someJSONObject = '{token:"randomtoken",signature:"signature"};
你需要把键放在"
。更好,让PHP做到这一点:
$someJSONObject = json_encode(array( 'token' => 'randomtoken', 'signature' = 'signature' ));
然而,你正在做的奇怪的事情是试图在另一个JSONstring中包含一串JSON。 这是说,温和地混淆。
相反,将数据作为数组传递给my_response
,并让json_encode
进行编码。
$someJSONObject = array( 'token' => 'randomtoken', 'signature' = 'signature' ); my_response($_GET['format'], $response);
在你的Javascript中,你应该可以做phpObj.data.token
。
我有一个类似的代码,但是,我的JSON看起来像这样
{ "token" [ "token": randomtoken, "signature": signature] }
然后我这样操作:
var datos = JSON.parse(JSON); for(var something in datos){ var objeto = datos[something]; alert('token: ' + objeto.token); }
对不起我英语不好