Как получить доступ к объекту SuperObject, если ключ содержит точки (например, IP-адрес)? - PullRequest
0 голосов
/ 06 сентября 2018

Код не может получить доступ к объекту JSON, если его ключ содержит точки.

JSON:

"TableTraps": {    
  "1.3.6.1.4.1.100.108.0.3": {
    "Vars": [ 
      "alarmDescription", 
      "alarmPositionUnit", 
      "alarmChannel"
    ]
  },
  "1.3.6.1.4.1.100.108.0.4": {
    "Vars": [ 
      "alarmDescription", 
      "alarmPositionUnit", 
      "alarmChannel"
    ]
  },
}

Код суперобъекта Pascal:

TableTraps := LoadFromFile();
TrapOID := '1.3.6.1.4.1.100.108.0.3';
trapInfo := TableTraps.O[TrapOID];

Результат trapInfo == nil, но я ожидаю, что экземпляр SuperObject. Я пытался завернуть ключ JSON:

TrapOID := '"' + '1.3.6.1.4.1.100.108.0.3' + '"';

или

TrapOID := '''' + '1.3.6.1.4.1.100.108.0.3' + '''';

Это не помогает.

Как мне вызвать SuperObject для доступа к экземпляру объекта, если ключ json содержит точки?

Смежный вопрос Как сериализовать ключ JSON, содержащий точки (например, IP-адрес), с SuperObject?

1 Ответ

0 голосов
/ 06 сентября 2018

Связанный вопрос помог мне найти решение. suprobject.O, вызываемый непосредственно в разобранном объекте, анализирует точки как JSONPath. Поэтому вместо доступа к "1.3.6.1.4.1.100.108.0.3: {}" он пытается получить доступ к этому JSON:

"1": { "3": { "6": { "1": { "4": { "1": { "100": { "0": { "3": value

Вот обходной путь:

TableTraps := LoadFromFile();
TrapOID := '1.3.6.1.4.1.100.108.0.3';
trapInfo := TableTraps.AsObject.O[TrapOID]; // NOTE: AsObject is required!
...