0
Under review

JSON: что делать, если ключ - это число?

evg 6 years ago updated by Vladimir Ovchinnikov (expert) 6 years ago 5

Добрый день!

Получаю от оборудования строку:

{"status":"ok","registrators":{"467375":  {"id":"467375","last_value":"32.6650","last_value_timestamp":"1550595600,"values":[{"timestamp":"1550534400","value":"32.5770"},{"timestamp":"1550361600","value":"32.3567"},{"timestamp":"1550361600","value":"32.3567"},{"timestamp":"1550365200","value":"32.3621"},{"timestamp":"1550368800","value":"32.3621"},{"timestamp":"1550372400","value":"32.3621"}

....

Конвертирую в JSON.

Вопрос в следующем: как получить доступ к массиву значений?

В строке адреса переменной JSONObject.registrators.467375.last_value появляется числовой ключ. В строке он, конечно же, текстовый, но как его правильно указать в строке адреса переменной не понимаю.






Under review

Добрый день.

Вы хотите преобразовать тип? Тогда Number(value).

Если имелось в виду что-то иное, то приложите кусок кода, с пояснениями, что нужно получить.

Нет. Вопрос в другом.

Мне нужно получить доступ к массиву values внутри JSON объекта (текст объекта JSON см выше)

"Адрес" этого массива в объекте JSON выглядит так:

JSONObject.registrators.467375.values[0]

Третий ключ в этом адресе - это число 467375, которое внутри объекта JSON хранится, как текст, но написать в скрипте просто JSONObject.registrators.467375.values[0] я не могу, т.к. движок считает, что я указал неверный ключ, т.е. он воспринимает 467375, как число, а не переменную.

Вопрос: как правильно указать путь к объекту JSON, если один из ключей - это число?


Так не могу: JSONObject.registrators.467375.values[0]

Так тоже не могу: JSONObject.registrators.'467375'.values[0]

Как?

Добрый день.

Вероятно вы хотите получить что-то подобное:

var personData = '{"467375":"Иван","age":37,"mother":{"name":"Ольга","age":58},"children":["Маша","Игорь","Таня"],"married": true,"dog": null}';
var person = JSON.Parse(personData);
IR.Log(person["467375"]); // Иван

Примерно так. А что если немного изменить данные и приблизить к моим. Например:

var personData = '{"Name":"Иван","age":37,"mother":{"3753":"Ольга","age":58},"children":["Маша","Игорь","Таня"],"married": true,"dog": null}';
var person = JSON.Parse(personData);

Как в этом случае получить "Ольга"?

IR.Log(person.mother.["3753"]); // Ольга?

var personData = '{"Name":"Иван","age":37,"mother":{"3753":"Ольга","age":58},"children":["Маша","Игорь","Таня"],"married": true,"dog": null}';

var person = JSON.Parse(personData);

IR.Log(person.mother["3753"]); // Ольга