2017-03-07 6 views
0
$json= 
"{ 
"name":"John", 
"name":"Karel" 
}"; 

このjson_decode($json, true);私は、解析した後、私は次のXMLを取得array['name']="Karel"を得る:私はこのXMLを取得する必要がありますカスタムPHPのJSONデコーダ利用の場合

<?xml version="1.0" encoding="UTF-8"?> 
<root> 
    <name value="Karel"/> 
</root> 

XMLを

<?xml version="1.0" encoding="UTF-8"?> 
<root> 
    <name> 
     <element>John</element> 
     <element>Karel</element> 
    </name> 
</root> 

私は自分自身のjsonパーサーが必要だと思う、私はarray['name']=["John","Karel"];を取得する必要がある私はこれを行うことができます。

EDITS: 入力jsonを編集できません。私は、同じインデックスの両方の値を持つ配列を作る必要がある同じキーの場合にファイルから連想配列にデコードする必要があります。

OK全体JSONfileはこれです:

{ 
    "name":"John", 
    "name":"Karel", 
    "heslo":{"content":"Dam ten shit podle sebe"}, 
    "ageA":30, 
    "d":21, 
    "d":42, 
    "ageB":30.2, 
    "ageC":1, 
    "ageD":0, 
    "testChar":["&","<",">","\"", "'", "-"], 
    "lada":{"pritelkyne":"Kristynka","plysak":"mimon", "vek":20, "oblibenýSeriál":"RobinsonůvOstrov"}, 
    "null":null, 
    "boolT":true, 
    "boolF":false, 
    "cars":[ { "type": "Skoda", "number": "212 555-1234" },"Ford", "BMW",{ "type": "Hyundai", "number": "215 555-1234" }, "Fiat" ], 
    "numbersSeven":[1,2,3,4,5,6,7], 
    "numbersFourteen":[1,2,3,4,5,6,7,8,9,10,11,12,13,14], 
    "numbersHundredOne":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101] 
} 

が、それは一つだけ多くの例からですが、私はこのJSONのためgenerrallyないまさにこれを実行する必要があります。

どのように解析する必要がありますか?

+1

次のコードを試してみることもできます.json_decodeについてのことではありませんので、配列を再設定する必要があります。 – hassan

+0

配列をどのようにリファクタリングする必要がありますか? –

+0

リファクタリングの配列がうまくいきません配列の値を持っていませんjsonファイルからデコードしてしまいます –

答えて

2

を試してみてください異なる値に対して同じキーを使用します。この代わりに、値を単一の配列に格納することができます。あなたは、この入力を受け取った場合は、編集された質問として

$json : '{"names":[{"name":"John"},{ 
"name":"Karel"}] 
}'; 

OR

$json = '{"name":["John","Karel"]}'; 

EDIT

は、次のコードで試してみてください。あるいは、別のキーに保存し、その後別の配列を使用それを乗り換えた後にjsonを変更したい。

$json= 
'{ 
"name":"John","name":"Karel" 
}'; 

$json = ltrim($json,"{"); 
$json= rtrim($json,"}"); 
$tmp_arr = (array_map('trim', explode(',', $json))); 
$new_arr['name']=array(); 
foreach ($tmp_arr as $key => $value) { 
    $val = explode(':', $value); 
    if(count($val)>1){ 
    $val=$val[1]; 
    $val = str_replace('"', '', $val); 
    $new_arr['name'][] = $val; 
    } 

} 

echo json_encode($new_arr); //{"name":["John","Karel"]} 
+0

私は2番目の例は、質問で希望の出力を出力すると思います – hassan

+0

私はできませんこれは、私はデコードで行う必要があります。 –

+0

しかし、同じキーは決して実行されません。最後の値は常に前回の値を取るので –

0

jsonarray使用するようにしてください:それは次のようになります[{ "名": "ジョン"}、 { "名": "カレル"}] はそうあなたがすることはできません。この

$arraysforjson = array(); 
$arraysforjson [] = array('name' => "$name") 
$json = json_encode($d); 
+0

私はデコードがエンコードされていないと私は私のjsonファイルにあるキーが必要です私はキーとしてのみ名前を持っていない、これはちょうどsnson jsonです –

関連する問題