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 に答える