将json对象从php传递给javascript

时间:2013-11-07 15:38:29

标签: javascript php json node.js

在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

任何帮助/反馈都将不胜感激。

3 个答案:

答案 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);
    }
抱歉,我的英文不好