2017-03-15 4 views
-2

配列を受け取り、特定のインデックス/キーを持つPHPでjson_encodeを使用して配列をjsonに変換したいと思います。配列結果: 特定のインデックス/キーを持つ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" 
} 
] 

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", 
}] 
} 

期待される結果にはどうすればいいのStatusCode、カード、studentcard、1000年を削除し、JSONで期待された結果にそれをエンコードすることができますか?

+1

初期のjsonは無効です – RomanPerekhrest

答えて

0

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

eval.inまたはrepl.itで実行してください。

JSONでは、オブジェクトの最後のプロパティの後に(つまり閉じ括弧の直前に)カンマを付けることはできません。また、2つの閉じ括弧もありませんでした。

+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; 

出力:あなたはcall_user_func_array('array_merge', ...)とその配列をフラット化することができます

[ 
    { 
     "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'の2つ以上の要素で動作します。 – Barmar

+0

1000と1001をハードコードしないでください。 – JeromeWang

関連する問題