Newtonsoft.JSON
является хорошим решением для подобных ситуаций. Кроме того, Newtonsof.JSON
работает быстрее других, таких как JavaScriptSerializer
, DataContractJsonSerializer
.
В этом примере вы можете:
var jsonData = JObject.Parse("your json data here");
Затем вы можете использовать jsonData для JArray
, и вы можете использовать для цикла для получения данных на каждой итерации. Кроме того, я хочу что-то добавить.
for (int i = 0; (JArray)jsonData["data"].Count; i++)
{
var data = jsonData[i - 1];
}
Работа с динамическим объектом и использование сериализации Newtonsoft - хороший выбор.
Скажем, у вас есть функция с забавным именем: "f"
def f(fruit)
fruit + "!"
end
arr = ["apples", "bananas", "coconuts", "watermelons"]
h = Hash[ *arr.collect { |v| [ v, f(v) ] }.flatten ]
даст вам:
{"watermelons"=>"watermelons!", "bananas"=>"bananas!", "apples"=>"apples!", "coconuts"=>"coconuts!"}
Обновлено:
Как упоминалось в комментариях, Ruby 1.8.7 вводит более приятный синтаксис для этого:
h = Hash[arr.collect { |v| [v, f(v)] }]
в дополнение к ответу Vlado Cingel (я еще не могу добавить комментарий, таким образом, я добавил ответ).
Вводят, может также использоваться таким образом: блок должен возвратить аккумулятор. Только присвоение в блоке возвращает значение присвоения, и об ошибке сообщают.
array = ["apples", "bananas", "coconuts", "watermelons"]
hash = array.inject({}) { |h,fruit| h[fruit]= f(fruit); h }
Вот что я, наверное, написал бы:
h = Hash[arr.zip(arr.map(&method(:f)))]
Просто, ясно, очевидно, декларативно. Чего еще вам нужно?