2

在 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 它似乎仍然没有帮助并给我一个“未定义”。

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

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

4

3 回答 3

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);

没有额外的解码步骤,不用担心转义引号等......

于 2013-11-07T15:41:35.497 回答
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.

于 2013-11-07T15:43:24.543 回答
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);
    }

对不起我的英语不好

于 2013-11-07T15:47:35.837 回答