解析 JSON 会给出几个单独的元素,将其作为一个元素


Parsing JSON gives few separate elements put toghether as one

我得到以下JSON(我在这里验证了):

{
    "name": "Brian",
    "agentid": "12345",
    "username": "bob",
    "passcode": "bob01",
    "call": {
        "aa": "11",
        "bb": "22",
        "cc": "33",
        "dd": "44"
    },
    "call": {
        "aa": "111",
        "bb": "222",
        "cc": "333",
        "dd": "444"
    },
    "call": {
        "aa": "1111",
        "bb": "2222",
        "cc": "3333",
        "dd": "4444"
    },
    "call": {
        "aa": "11111",
        "bb": "22222",
        "cc": "33333",
        "dd": "44444"
    }
}

当我把它放在var_dump(json_decode($json, true));,它给了我:

array(5) { 
    ["name"]=> string(5) "Brian" 
    ["agentid"]=> string(5) "12345" 
    ["username"]=> string(3) "bob" 
    ["passcode"]=> string(5) "bob01" 
    ["call"]=> array(4) {
        ["aa"]=> string(5) "11111" 
        ["bb"]=> string(5) "22222" 
        ["cc"]=> string(5) "33333" 
        ["dd"]=> string(5) "44444" 
    }
} 

看起来前三个call元素被覆盖了。

如何解析此 JSON 并保留所有call元素?

这是有效的 JSON 语法,但内容没有意义。拥有多个同名的密钥是错误的。您应该制作单个call并将其转换为存储所有对象的 JSON 数组

{  
   "name":"Brian",
   "agentid":"12345",
   "username":"bob",
   "passcode":"bob01",
   "call":[  
      {  
         "aa":"11",
         "bb":"22",
         "cc":"33",
         "dd":"44"
      },
      {  
         "aa":"111",
         "bb":"222",
         "cc":"333",
         "dd":"444"
      },
      {  
         "aa":"1111",
         "bb":"2222",
         "cc":"3333",
         "dd":"4444"
      },
      {  
         "aa":"11111",
         "bb":"22222",
         "cc":"33333",
         "dd":"44444"
      }
   ]
}