0
{"": "attachment-2","": "attachment-1"}

メールの解析から、この JSON エンコードされた文字列 (または他の形式... 教えてください) を取得していますが、変更できません。どうすればデコードできますか?

4

3 に答える 3

5

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"
}
于 2012-10-11T11:01:40.193 に答える
1

JSON はduplicated keys.

この応答を要求しようとしているサービスに連絡する必要があります。

有効な JSON 応答がある場合は、または(2 番目のパラメーターによって異なります)json_decodeを返す関数を使用してデコードできます。objectarray

例: (オブジェクト)

$json_string = '{"keyOne": "attachment-2","keyTwo": "attachment-1"}';
$decoded = json_decode($json_string);

print $obj->keyOne; //attachment-2
print $obj->keyTwo; //attachment-1

もう 1 つのオプションは、独自のデコーダー関数を作成することです。

于 2012-10-11T11:06:48.620 に答える
0

自分で解読?

$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;
}
于 2012-10-11T11:04:45.100 に答える