.Net Linq to JSON с библиотекой Newtonsoft JSON - PullRequest
4 голосов
/ 17 февраля 2011

У меня есть некоторый JSON, который отправляется на мой веб-сервис, который выглядит примерно так:

{
    root: [
        {
            "key": "foo1",
            "val": "150"
        },
        {
            "key": "foo2",
            "val": "220"
        },
        {
            "key": "foo3",
            "val": "300"
        },
        {
            "key": "dataid",
            "val": "2289"
        }
    ]
}

Скажем, я хотел вернуть значение val, где key равно "dataid".Как бы я сделал это, используя библиотеку JSON.Net ?

Я знаю, что могу перебрать значения, чтобы найти его, но вполне вероятно, что объект будет намного больше, чем этот пример здесь,

Заранее спасибо

Ответы [ 2 ]

18 голосов
/ 17 февраля 2011

Ну что-то в какой-то момент придется пройти через цикл. Если вам нужно получить множество значений по ключу из того же JSON, вам, вероятно, следует создать из него Dictionary<string, string> - что означает однократное его повторение (либо явно, либо с использованием метода LINQ ToDictionary), но затем последующий быстрый доступ .

Вот пример кода:

using System;
using System.IO;
using System.Linq;

using Newtonsoft.Json.Linq;

class Test
{
    static void Main()
    {
        string text = File.ReadAllText("test.json");
        JObject obj = JObject.Parse(text);
        JArray root = (JArray) obj["root"];

        var dictionary = root.ToDictionary(x => (string) x["key"],
                                           x => (string) x["val"]);

        Console.WriteLine(dictionary["dataid"]);
    }
}
7 голосов
/ 17 февраля 2011

Джон опередил меня, но вот еще один способ сделать это:

var json = File.ReadAllText("data.json");
var jobject = JObject.Parse(json);

var item = jobject.Property("root")
                  .Values()
                  .Single(x => x.Value<string>("key") == "foo1");

var value = item.Value<string>("val");

Console.WriteLine(value);

Чуть больше LINQ-y, но невозможно по-настоящему избавиться от волшебных строк, если вы используете LINQ to JSON.

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