【发布时间】:2017-07-27 12:58:44
【问题描述】:
$json=
"{
"name":"John",
"name":"Karel"
}";
如果使用这个json_decode($json, true);,我会得到array['name']="Karel",所以解析后我会得到以下xml:
xml:
<?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"]; 然后我才能做到这一点。
编辑: 我无法编辑输入 json。如果有相同的键,我需要从文件解码到关联数组,我需要在同一索引上创建一个包含两个值的数组。
好的,整个 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 执行此操作。
那我应该怎么解析呢?
【问题讨论】:
-
这与 json_decode 无关,您需要重构您的数组。
-
我应该如何重构数组?
-
我不认为重构数组会起作用我没有数组中的值我丢失了它们,我从 json 文件解码
-
澄清一下,那个 JSON 文件是无效,因为你有相同的键和两个不同的值。如果你不能改变它,你需要知道大多数 JSON 解析器要么会产生错误,要么会丢弃部分数据(我认为规范将它留给实现者做什么,但是“创建一个拥有两个值的新结构”是不太可能的。)
-
有几个可以提供帮助 - one I wrote 或 another from someone else that takes a different approach。它们都是流式解析器,因此它们允许您一次访问每个元素,但您必须投入更多的工作来构建您想要的结构。
标签: php json xml duplicates