2017-03-15 61 views
-2

我收到了一个数组,并希望通过在PHP中使用带有特定索引/键的json_encode将其转换为json。数组结果:PHP - 数组到具有特定索引/键的json

{"StatusCode": "2800", 
"card": { 
"studentcard": { 
"1000": [ 
{ 
"Name": "Jerome", 
"CardNumber": "512314512312", 
"CardExpiry": "2017-03-24", 
"CardType": "Library", 
}, 
{ 
"Name": "Jerome", 
"CardNumber": "512314512312-b", 
"CardExpiry": "2017-10-22", 
"CardType": "IT", 
}], 
"1001": [ 
{ 
"Name": "Jason", 
"CardNumber": "512314512313", 
"CardExpiry": "2017-10-22", 
"CardType": "Library", 
}] 
} 

预期结果在JSON

[ 
{ 
    "Name": "Jerome", 
    "CardNumber": "512314512312", 
    "CardExpiry": "2017-03-24", 
    "CardType": "Library" 
}, 
{ 
    "Name": "Jerome", 
    "CardNumber": "512314512312-b", 
    "CardExpiry": "2017-10-22", 
    "CardType": "IT" 
}, 
{ 
    "Name": "Jason", 
    "CardNumber": "512314512313", 
    "CardExpiry": "2017-10-22", 
    "CardType": "Library" 
} 
] 

如何删除的StatusCode,卡,studentcard,1000并将其编码为JSON中预期的结果?

+1

最初的json无效 – RomanPerekhrest

回答

0

可以弄平该阵列call_user_func_array('array_merge', ...)

$obj = json_decode($json, true); 
$result = call_user_func_array('array_merge', $obj["card"]["studentcard"]); 
$json = json_encode($result, JSON_PRETTY_PRINT); 

看到它在eval.inrepl.it上运行。

请注意,在JSON中,不能在对象的最后一个属性(即刚好在大括号之前)后留有逗号。此外,你有两个闭合的括号丢失。

+0

您的解决方案就像魅力一样。永远不要考虑它。感谢您更正json格式。编辑 – JeromeWang

0

使用json_decodearray_merge功能的有效 JSON字符串的溶液:

$json_str = '{ 
    "StatusCode": "2800", 
    "card": { 
     "studentcard": { 
      "1000": [{ 
       "Name": "Jerome", 
       "CardNumber": "512314512312", 
       "CardExpiry": "2017-03-24", 
       "CardType": "Library" 
      }, { 
       "Name": "Jerome", 
       "CardNumber": "512314512312-b", 
       "CardExpiry": "2017-10-22", 
       "CardType": "IT" 
      }], 
      "1001": [{ 
       "Name": "Jason", 
       "CardNumber": "512314512313", 
       "CardExpiry": "2017-10-22", 
       "CardType": "Library" 
      }] 
     } 
    } 
}'; 

$data = json_decode($json_str, true); 
$data = array_merge($data["card"]["studentcard"]["1000"], $data["card"]["studentcard"]["1001"]); 
$json = json_encode($data, JSON_PRETTY_PRINT); 

echo $json; 

输出:

[ 
    { 
     "Name": "Jerome", 
     "CardNumber": "512314512312", 
     "CardExpiry": "2017-03-24", 
     "CardType": "Library" 
    }, 
    { 
     "Name": "Jerome", 
     "CardNumber": "512314512312-b", 
     "CardExpiry": "2017-10-22", 
     "CardType": "IT" 
    }, 
    { 
     "Name": "Jason", 
     "CardNumber": "512314512313", 
     "CardExpiry": "2017-10-22", 
     "CardType": "Library" 
    } 
] 
+0

这只是一个疯狂的猜测,但他可能需要一个解决方案,它不会硬编码'1000'和'1001',并且可以在'studentcard'中使用两个以上的元素。 – Barmar

+0

可能不会硬编码1000和1001? – JeromeWang