PHP JSON-декодирование: массив с проблемой '$'

У меня в качестве входных данных используется следующий файл 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": "<>"
            }
          ]
        },

и т. Д. .

Моя конечная цель - рекурсивно отследить это дерево, заключив каждый ключ / имя объекта в теги

    , а свойства на уровне «ParticleIndex» - в некую форму < > , но я не могу понять, как выполнить индексацию в два массива $ values.

    Это код, которым я управлял, чтобы узнать, как осуществляется доступ к каждому элементу (объекту или массиву):

    foreach ($json->NBBList->'$values'[0] as $key => $value){
        var_dump($key);
        echo "\n".var_dump($value);
        echo "\n\n\n";
    }
    

    Это явно не работает, потому что индекс значений находится за пределами строки, но когда он находится внутри, PHP интерпретирует его как часть строки.

    Есть ли у меня способ индексировать в каждом элемент массива $ values ​​и ultim в цикле for?

    Я думаю, что использование свойства "true" декодирования JSON может быть лучшим решением ...

6
задан Lightness Races with Monica 10 June 2011 в 18:27
поделиться