Использовать JSON-канал в правильном Ruby - PullRequest
1 голос
/ 17 декабря 2010

В настоящее время я использую API-канал в проекте ruby ​​on rails. Будучи новичком в Ruby, я не чувствую, что использую JSON и управляю им должным образом. Есть несколько функций, которые не работают, и я полагаю, что они вращаются вокруг того, как я отношусь к объекту JSON, когда он у меня есть. Вот с чем я работаю.

{ "auth" : {
    "person" : {
        "id" : 1,
        "name" : "john",
        "pass" : "123"
    },
    "person" : {
        "id" : 2,
        "name" : "fred",
        "pass" : "789"
    }
}}

Я обнаружил, что могу получить простой массив, выполнив:

jsonArray = JSON.parse(persons)
# the following allows me to target the persons objects
personArray = jsonArray["auth"]["persons"]

Проблема в том, что попытка сделать что-то вроде personArray.first(5) приводит меня к ошибкам преобразования строк. Я хотел бы получить это в работающий хэш, что-то, из чего я могу выполнять операции, но в настоящее время кажется, что я могу перебирать его только как хэш. Возможно, мне придется отсортировать, вытащить людей и выполнить другие операции с этими данными результата. Как мне правильно импортировать это?

Ответы [ 2 ]

2 голосов
/ 17 декабря 2010

Ваш JSON выше приводит к тому, что объект JS хранит меньше данных, чем вы думаете.Вы перезаписываете клавишу person несколько раз.Попробуйте скопировать / вставить это в консоль вашего веб-браузера:

var o = { "auth" : {
  "person" : {
    "id" : 1,
    "name" : "john",
    "pass" : "123"
  },
  "person" : {
    "id" : 2,
    "name" : "fred",
    "pass" : "789"
  }
}};

JSON.stringify(o);
// '{"auth":{"person":{"id":2,"name":"fred","pass":"789"}}}'
2 голосов
/ 17 декабря 2010

На самом деле прямой анализ строки json не даст вам ["auth"]["persons"]. В строке json нет поля "persons". Надеюсь, это ошибка опечатки.

Точный формат, который вам нужен для того, чтобы personArray.first(5) работал, должен быть:

{
  "auth": {
    "persons": [ # Note the square bracket here, which defines an array instead of a hash
      {"id": 1, "name": "john", "pass": "123"},
      {"id": 2, "name": "fred", "pass": "789"}
    ]
  }
}

и ты мог бы делать то, что хотел сейчас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...