{"": "attachment-2","": "attachment-1"}
メールの解析から、この JSON エンコードされた文字列 (または他の形式... 教えてください) を取得していますが、変更できません。どうすればデコードできますか?
JSON パーサーは同じキーのために最初の要素を常に上書きするため、これには使用できません。唯一の適切な解決策は、その「JSON」を作成した人に、配列または一意のキーを持つオブジェクトを使用するようにコードを修正するよう依頼することです。
それがオプションでない場合は、JSON を書き換えて一意のキーを使用してから解析することしかできません。json_decode()
常に適切な JSON が得られ、重複したキーが常に空であると仮定すると、置き換えることができ"":
ます"random-string":
-preg_replace_callback()
この場合の友達は次のとおりです。
$lame = '{"": "attachment-2","": "attachment-1"}';
$json = preg_replace_callback('/"":/', function($m) {
return '"' . uniqid() . '":';
}, $lame);
var_dump(json_decode($json));
出力:
object(stdClass)#1 (2) {
["5076bdf9c2567"]=>
string(12) "attachment-2"
["5076bdf9c25b5"]=>
string(12) "attachment-1"
}
JSON はduplicated keys
.
この応答を要求しようとしているサービスに連絡する必要があります。
有効な JSON 応答がある場合は、または(2 番目のパラメーターによって異なります)json_decode
を返す関数を使用してデコードできます。object
array
例: (オブジェクト)
$json_string = '{"keyOne": "attachment-2","keyTwo": "attachment-1"}';
$decoded = json_decode($json_string);
print $obj->keyOne; //attachment-2
print $obj->keyTwo; //attachment-1
もう 1 つのオプションは、独自のデコーダー関数を作成することです。
自分で解読?
$myStr = '{"": "attachment-2","": "attachment-1"}';
$vars = explode(',',$myStr);
$arr = array();
foreach($vars as $v){
list($key,$value) = explode(':',$v);
$key = substr($key,strpos($key,'"'),strpos($key,'"')-strrpos($key,'"'));
$value = substr($value,strpos($value,'"'),strpos($value,'"')-strrpos($value,'"'));
if($key=='')$arr[] = $value;
else $arr[$key] = $value;
}