我有以下JSON文件作为输入,
{
"$type": "NanoWebInterpreter.WebInputData, NanoWebInterpreter",
"NBBList": {
"$type": "System.Collections.Generic.List`1[[monoTNP.Common.NBB, monoTNP.Common]], mscorlib",
"$values": [
{
"$type": "monoTNP.Common.NBB, monoTNP.Common",
"ID": "id-0065-00000003",
"MPList": {
"$type": "System.Collections.Generic.List`1[[monoTNP.Common.MP, monoTNP.Common]], mscorlib",
"$values": [
{
"$type": "monoTNP.Common.EllipticalMP, monoTNP.Common",
"Eccentricity": 1.0,
"ID": "id-0065-00000006",
"ParticleIndex": -1,
"DispersionInteractionStrength": 0.0,
"DispersionInteractionRange": 2.5,
"CharacteristicSize": 0.0,
"CenterOfMass": "<0,0,0>",
"OrientationVector": "<>"
},
{
"$type": "monoTNP.Common.CubeMP, monoTNP.Common",
"ID": "id-0065-00000005",
"ParticleIndex": -1,
"DispersionInteractionStrength": 0.0,
"DispersionInteractionRange": 2.5,
"CharacteristicSize": 0.0,
"CenterOfMass": "<0,0,0>",
"OrientationVector": "<>"
},
{
"$type": "monoTNP.Common.CircularMP, monoTNP.Common",
"ID": "id-0065-00000004",
"ParticleIndex": -1,
"DispersionInteractionStrength": 0.0,
"DispersionInteractionRange": 2.5,
"CharacteristicSize": 0.0,
"CenterOfMass": "<0,0,0>",
"OrientationVector": "<>"
}
]
},
等
我的最终目标是以递归方式跟踪此树,使用<ul>
标记包装每个键/对象名称,并在某种<form>
结构中使用“ParticleIndex”级别的属性,但我可以弄清楚如何索引两个'$ values'数组。
这是我一直在操作的代码,用于了解如何访问每个元素(对象或数组):
foreach ($json->NBBList->'$values'[0] as $key => $value){
var_dump($key);
echo "\n".var_dump($value);
echo "\n\n\n";
}
这显然不起作用,因为值的索引在字符串之外,但当它在内部时,PHP将其解释为字符串的一部分。
我有没有办法索引'$ values'数组的每个元素,最终在for循环中?
我认为使用JSON解码的“true”属性可能是更好的解决方案......
答案 0 :(得分:6)
您可以使用以下表示法访问名称包含特殊字符的对象属性:
$json->NBBList->{'$values'}[0]
我不认为此行为会在任何地方记录,但您可以在PHP grammar中找到它(请参阅variable_name
中使用的object_dim_list
定义在object_property
)。
答案 1 :(得分:4)
将json_decode
的assoc
参数设置为false以获取数组(字典)而不是对象:
$json = json_decode($jsonInput, true);
foreach ($json['NBBList']['$values'][0] as $key => $value){
var_dump($key);
echo "\n";
var_dump($value);
echo "\n\n\n";
}
答案 2 :(得分:1)
foreach($json->NBBList->{'$values'}[0] as $key=>$value){
您可以在字符串周围使用花括号来访问具有特殊字符的对象的属性。
答案 3 :(得分:-2)
你尝试过类似的东西吗?
$show_values = $values[0];
foreach ($json->NBBList->'$show_values' as $key => $value){
var_dump($key);
echo "\n".var_dump($value);
echo "\n\n\n";
只是一个想法,我不确定它的效果如何