我有一个像这样的JSON数组(它在数组中有一个数组,如下面的代码所示)
{
"data": [
{
"id": "40",
"memo_kondisi": "OKe lah",
"id_kondisi": "010118",
"total_row": "2",
"nilai_temuan": "10.000.000",
"nilai_potensi_kerugian": "9.000.000",
"data_sebab": [
{
"id": "12",
"id_sebab": "0202",
"total_row_b": "2",
"memo_sebab": "sebab 1",
"data_rekomendasi": [
{
"id": "14",
"id_rekomendasi": "",
"nilai_rekomendasi": "0",
"memo_rekomendasi": "",
"data_tindak_lanjut": [
{
"id": "20",
"id_tindak_lanjut": "",
"nilai_tindak_lanjut": "0",
"memo_tindak_lanjut": "",
"tindak_lanjut_no": "1",
"tgl_tindak_lanjut": "0000-00-00"
},
{
"id": "21",
"id_tindak_lanjut": "",
"nilai_tindak_lanjut": "0",
"memo_tindak_lanjut": "",
"tindak_lanjut_no": "1",
"tgl_tindak_lanjut": "0000-00-00"
}
]
},
{
"id": "14",
"id_rekomendasi": "",
"nilai_rekomendasi": "0",
"memo_rekomendasi": "",
"data_tindak_lanjut": [
{
"id": "20",
"id_tindak_lanjut": "",
"nilai_tindak_lanjut": "0",
"memo_tindak_lanjut": "",
"tindak_lanjut_no": "1",
"tgl_tindak_lanjut": "0000-00-00"
},
{
"id": "21",
"id_tindak_lanjut": "",
"nilai_tindak_lanjut": "0",
"memo_tindak_lanjut": "",
"tindak_lanjut_no": "1",
"tgl_tindak_lanjut": "0000-00-00"
}
]
}
]
}
]
}
]
}
我希望JSON数组看起来像这样: 预期结果
{
"data": [
{
"id": "40",
"memo_kondisi": "OKe lah",
"id_kondisi": "010118",
"total_row": "2",
"nilai_temuan": "10.000.000",
"nilai_potensi_kerugian": "9.000.000",
"data_sebab": [{
"id": "20",
"id_tindak_lanjut": "",
"nilai_tindak_lanjut": "0",
"memo_tindak_lanjut": "",
"tindak_lanjut_no": "1",
"tgl_tindak_lanjut": "0000-00-00"
},
{
"id": "21",
"id_tindak_lanjut": "",
"nilai_tindak_lanjut": "0",
"memo_tindak_lanjut": "",
"tindak_lanjut_no": "1",
"tgl_tindak_lanjut": "0000-00-00"
},
{
"id": "20",
"id_tindak_lanjut": "",
"nilai_tindak_lanjut": "0",
"memo_tindak_lanjut": "",
"tindak_lanjut_no": "1",
"tgl_tindak_lanjut": "0000-00-00"
},
{
"id": "21",
"id_tindak_lanjut": "",
"nilai_tindak_lanjut": "0",
"memo_tindak_lanjut": "",
"tindak_lanjut_no": "1",
"tgl_tindak_lanjut": "0000-00-00"
}
]
}
]
}
因此,数组父项将被删除并将保留一个子数组,它就像push array
但反过来它将删除父JSON数组。有什么建议吗?由于我不知道如何删除父数组,因此我没有提供任何最小代码。
答案 0 :(得分:1)
以下是使用jq的解决方案。如果样本数据在data.json
,那么命令
$ jq -M '.data[].data_sebab |= map(.data_rekomendasi[].data_tindak_lanjut[])' data.json
产生
{
"data": [
{
"id": "40",
"memo_kondisi": "OKe lah",
"id_kondisi": "010118",
"total_row": "2",
"nilai_temuan": "10.000.000",
"nilai_potensi_kerugian": "9.000.000",
"data_sebab": [
{
"id": "20",
"id_tindak_lanjut": "",
"nilai_tindak_lanjut": "0",
"memo_tindak_lanjut": "",
"tindak_lanjut_no": "1",
"tgl_tindak_lanjut": "0000-00-00"
},
{
"id": "21",
"id_tindak_lanjut": "",
"nilai_tindak_lanjut": "0",
"memo_tindak_lanjut": "",
"tindak_lanjut_no": "1",
"tgl_tindak_lanjut": "0000-00-00"
}
]
}
]
}
答案 1 :(得分:1)
您可以使用json_decode()
解码数组,然后重新分配数组:
# Presumably you have this somewhere as an array already or in a string
$json = '{
"data": [
{
"id": "40",
"memo_kondisi": "OKe lah",
"id_kondisi": "010118",
"total_row": "2",
"nilai_temuan": "10.000.000",
"nilai_potensi_kerugian": "9.000.000",
"data_sebab": [
{
"id": "12",
"id_sebab": "0202",
"total_row_b": "2",
"memo_sebab": "sebab 1",
"data_rekomendasi": [
{
"id": "14",
"id_rekomendasi": "",
"nilai_rekomendasi": "0",
"memo_rekomendasi": "",
"data_tindak_lanjut": [
{
"id": "20",
"id_tindak_lanjut": "",
"nilai_tindak_lanjut": "0",
"memo_tindak_lanjut": "",
"tindak_lanjut_no": "1",
"tgl_tindak_lanjut": "0000-00-00"
},
{
"id": "21",
"id_tindak_lanjut": "",
"nilai_tindak_lanjut": "0",
"memo_tindak_lanjut": "",
"tindak_lanjut_no": "1",
"tgl_tindak_lanjut": "0000-00-00"
}
]
}
]
}
]
}
]
}';
# Decode
$array = json_decode($json,true);
# Reassign
$array['data'][0]['data_sebab'] = $array['data'][0]['data_sebab'][0]['data_rekomendasi'][0]['data_tindak_lanjut'];
# Write back to json
echo json_encode($array);
答案 2 :(得分:1)
你有4个嵌套数组,所以为了展平中间的两个层,你必须执行4个嵌套循环。
$data = json_decode($json, true)['data'];
$result = [];
foreach ($data as $datum) {
// copy top tier
$copy = $datum;
// clear children
$copy['data_sebab'] = null;
foreach ($datum['data_sebab'] as $sebab) {
foreach ($sebab['data_rekomendasi'] as $rekomendasi) {
foreach ($rekomendasi['data_tindak_lanjut'] as $tindak_lanjut) {
// copy leaf child
$copy['data_sebab'] []= $tindak_lanjut;
}
}
}
// nest last leaf under top tier
$result['data'] []= $copy;
}
echo json_encode($result, JSON_PRETTY_PRINT);
答案 3 :(得分:1)
尝试使用ES6 for...of声明:
for-of
引入的ES6
循环允许以简洁的方式迭代数组(或任何可迭代的),类似于我们如何使用for-in
迭代对象的键
工作演示:
var jsonObj = {
"data": [
{
"id": "40",
"memo_kondisi": "OKe lah",
"id_kondisi": "010118",
"total_row": "2",
"nilai_temuan": "10.000.000",
"nilai_potensi_kerugian": "9.000.000",
"data_sebab": [
{
"id": "12",
"id_sebab": "0202",
"total_row_b": "2",
"memo_sebab": "sebab 1",
"data_rekomendasi": [
{
"id": "14",
"id_rekomendasi": "",
"nilai_rekomendasi": "0",
"memo_rekomendasi": "",
"data_tindak_lanjut": [
{
"id": "20",
"id_tindak_lanjut": "",
"nilai_tindak_lanjut": "0",
"memo_tindak_lanjut": "",
"tindak_lanjut_no": "1",
"tgl_tindak_lanjut": "0000-00-00"
},
{
"id": "21",
"id_tindak_lanjut": "",
"nilai_tindak_lanjut": "0",
"memo_tindak_lanjut": "",
"tindak_lanjut_no": "1",
"tgl_tindak_lanjut": "0000-00-00"
}
]
},
{
"id": "14",
"id_rekomendasi": "",
"nilai_rekomendasi": "0",
"memo_rekomendasi": "",
"data_tindak_lanjut": [
{
"id": "20",
"id_tindak_lanjut": "",
"nilai_tindak_lanjut": "0",
"memo_tindak_lanjut": "",
"tindak_lanjut_no": "1",
"tgl_tindak_lanjut": "0000-00-00"
},
{
"id": "21",
"id_tindak_lanjut": "",
"nilai_tindak_lanjut": "0",
"memo_tindak_lanjut": "",
"tindak_lanjut_no": "1",
"tgl_tindak_lanjut": "0000-00-00"
}
]
}
]
}
]
}
]
};
var newArr = [];
for (let i of jsonObj.data) {
for (let j of i.data_sebab) {
for (let k of j.data_rekomendasi) {
for (let l of k.data_tindak_lanjut) {
newArr.push(l);
}
}
}
}
jsonObj.data[0].data_sebab = newArr;
console.log(jsonObj);