【问题标题】:Issue with json_decode and json_encode - it adds keys to original JSONjson_decode 和 json_encode 的问题 - 它将密钥添加到原始 JSON
【发布时间】:2012-03-08 13:02:13
【问题描述】:

我有这个 JSON 字符串:

{
    "product": [
        {
            "id": "1",
            "title": "producta",
            "size": "50",
            "weight": "1000",
            "price": "30",
            "quantity": "100",
            "cartID": "1"
        },
        {
            "id": "1",
            "title": "producta",
            "size": "50",
            "weight": "1000",
            "price": "30",
            "quantity": "100",
            "cartID": "2"
        }
    ]
}

当我使用 PHP 函数 json_decode($products, true),然后我使用 json_encode($products) 对其重新编码时,字符串变为:

{
    "product": {
        "1": {
            "id": "2",
            "title": "producta",
            "size": "50",
            "weight": "1000",
            "price": "30",
            "quantity": "100",
            "cartID": "2"
        },
        "2": {
            "id": "1",
            "title": "producta",
            "size": "50",
            "weight": "1000",
            "price": "30",
            "quantity": "100",
            "cartID": "3"
        }
    }
}

解码和重新编码后,它为每个“产品”添加一个密钥

有没有办法解决这个问题?

【问题讨论】:

  • 神圣哔哔蝙蝠侠!太可怕了!
  • :/ 原来的格式有没有错误?
  • @TaylorMac:不,这只是我讨厌 PHP 的一种新方式。
  • @RPM: "通常你用 JavaScript 检索 JSON 数据" 真的吗?我通常使用 Python 从 Web 服务中提取它。
  • 所有 PHP 数组必须有键。 json_encode() 将精确复制内部存储的任何内容,包括这些密钥。

标签: php json


【解决方案1】:

在这里发布,因为它在评论中太丑陋了,但这是我在做echo json_encode(json_decode('...your json...', true)); 之后在 PHP 5.3.6 上得到的:

{"product":  [
     {"id":"1","title":"producta","size":"50","weight":"1000","price":"30","quantity":"100","cartID":"1"},
     {"id":"1","title":"producta","size":"50","weight":"1000","price":"30","quantity":"100","cartID":"2"}
]}

请注意缺少额外的键。在重新编码之前,您是否对解码后的数组进行了任何操作?

【讨论】:

  • 我很高兴它对你有用。我没有进行任何操作...可能是 PHP 版本:/
  • 我遇到了同样的问题,当我使用我的 array_search - 键值滑动 array_keys 并使用生成的 json_encoded 数组获取 0、1 等键值时。有什么建议吗?我的问题链接:stackoverflow.com/questions/24228468/…
【解决方案2】:

您可能正在使用 mysqli_fetch_array 而不是 mysqli_fetch_assoc。意思是你是 json 解码一个键数组而不是一个关联数组

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-07
    • 1970-01-01
    • 1970-01-01
    • 2018-09-10
    • 2017-08-31
    • 2018-11-07
    • 1970-01-01
    相关资源
    最近更新 更多