【问题标题】:json decoding become Array to string conversion [duplicate]json解码成为数组到字符串的转换[重复]
【发布时间】:2019-12-22 04:49:35
【问题描述】:

任何人都可以告诉我为什么在我解码它时返回到数组到字符串对话。我没有看到这种类型的 JSON 有任何错误。

{"transaction":{"token":"8mBjEEGt0E7QxhZoObDb8Jy0gSH","created_at":"2019-12-22T04:42:23Z","updated_at":"2019-12-22T04:42:24Z","succeeded":true,"transaction_type":"AddPaymentMethod","retained":false,"state":"succeeded","message_key":"messages.transaction_succeeded","message":"Succeeded!","payment_method":{"token":"TRYA1r9WQ0u8jllrJVHRjYyBOIh","created_at":"2019-12-22T04:42:23Z","updated_at":"2019-12-22T04:42:24Z","email":"fstancereq@virginia.edu","data":null,"storage_state":"cached","test":false,"metadata":null,"callback_url":null,"last_four_digits":"2214","first_six_digits":"475129","card_type":"visa","first_name":"Fleur","last_name":"Stancer","month":8,"year":2022,"address1":"46 Meadow Ridge Drive","address2":null,"city":"Orlando","state":"FL","zip":"32885","country":"US","phone_number":null,"company":null,"full_name":"Fleur Stancer","eligible_for_card_updater":true,"shipping_address1":null,"shipping_address2":null,"shipping_city":null,"shipping_state":null,"shipping_zip":null,"shipping_country":null,"shipping_phone_number":null,"payment_method_type":"credit_card","errors":[],"fingerprint":"fb8a1c8ddfb37ad4810335243495109596aa","verification_value":"XXX","number":"XXXX-XXXX-XXXX-2214"}}}

当我使用 json_decode 解码时

echo $json["transaction"]["payment_method"];

我也在寻找同样的问题,但没有得到答案。

【问题讨论】:

    标签: php json


    【解决方案1】:

    JSON 没有任何问题。

    如果您尝试像字符串一样回显数组,PHP 会尝试将数组转换为字符串。

    看下面的 JSON,$json["transaction"]["payment_method"] 不是字符串。它是一个对象或数组,具体取决于您如何对其进行解码。

    {
      "transaction": {
        "token": "8mBjEEGt0E7QxhZoObDb8Jy0gSH",
        "created_at": "2019-12-22T04:42:23Z",
        "updated_at": "2019-12-22T04:42:24Z",
        "succeeded": true,
        "transaction_type": "AddPaymentMethod",
        "retained": false,
        "state": "succeeded",
        "message_key": "messages.transaction_succeeded",
        "message": "Succeeded!",
        "payment_method": {
          "token": "TRYA1r9WQ0u8jllrJVHRjYyBOIh",
          "created_at": "2019-12-22T04:42:23Z",
          "updated_at": "2019-12-22T04:42:24Z",
          "email": "fstancereq@virginia.edu",
          "data": null,
          "storage_state": "cached",
          "test": false,
          "metadata": null,
          "callback_url": null,
          "last_four_digits": "2214",
          "first_six_digits": "475129",
          "card_type": "visa",
          "first_name": "Fleur",
          "last_name": "Stancer",
          "month": 8,
          "year": 2022,
          "address1": "46 Meadow Ridge Drive",
          "address2": null,
          "city": "Orlando",
          "state": "FL",
          "zip": "32885",
          "country": "US",
          "phone_number": null,
          "company": null,
          "full_name": "Fleur Stancer",
          "eligible_for_card_updater": true,
          "shipping_address1": null,
          "shipping_address2": null,
          "shipping_city": null,
          "shipping_state": null,
          "shipping_zip": null,
          "shipping_country": null,
          "shipping_phone_number": null,
          "payment_method_type": "credit_card",
          "errors": [],
          "fingerprint": "fb8a1c8ddfb37ad4810335243495109596aa",
          "verification_value": "XXX",
          "number": "XXXX-XXXX-XXXX-2214"
        }
      }
    }
    

    您可以使用print_r($json);输出它以查看解码后的数据。

    你可以做的其他一些事情:

    // Output a data element of payment_method
    echo $json["transaction"]["payment_method"]["token"];
    
    // Output all values
    foreach($json['transaction']['payment_method'] as $k => $v) {
        echo "$k = $v\n";
    }
    

    输出到 HTML

    <?php
    echo "<table>";
    echo "<tr><th>Key</th><td>Value</td></tr>";
    foreach($json['transaction']['payment_method'] as $k => $v) : ?>
        <tr>
          <td><?= $k ?></td>
          <td><?= $v ?></td>
        </tr>
    <?php
    endforeach;
    echo "</table>";
    ?>
    

    【讨论】:

      【解决方案2】:

      您尝试回显一个数组:

      [
          "token" => "TRYA1r9WQ0u8jllrJVHRjYyBOIh",
          "created_at" => "2019-12-22T04:42:23Z",
          "updated_at" => "2019-12-22T04:42:24Z",
          // etc
      ]
      

      测试时尝试以下命令获取值:

      var_dump($json["transaction"]["payment_method"]);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-07-11
        • 1970-01-01
        • 1970-01-01
        • 2015-01-17
        • 2018-12-17
        • 2016-04-28
        • 2020-07-01
        • 1970-01-01
        相关资源
        最近更新 更多