Как я могу разобрать очень вложенный JSON по ньютону в C #? - PullRequest
0 голосов
/ 24 мая 2018

Как я могу получить доступ ко второму элементу в результатах выполнения: "" значение ": 1, " Я не могу этого сделать. Как я могу получить второе значение?

  JObject jo = JObject.Parse(Resource1.samplejson);
        var valueQuery = jo.SelectTokens("results[*].value").Any();

{{
  "type": "SUCCESS",
  "msg": "Container test successfully called.",
  "result": {
    "execution-results": {
      "results": [
        {
          "value": {
            "com.myteam.test.Pricing": {
              "a": 0.196100271932827,
               "b": 7,
               "c": 0.012,

            }
          },
          "key": "mymodel"
        },
        {
          "value": 1,
          "key": ""
        }
      ],
      "facts": [
        {
          "value": {
            "org.test.core.common.DefaultFactHandle": {
              "external-form": "0:598:701211836:701211836:1164:DEFAULT:NON_TRAIT:com.myteam.x.mymodel"
            }
          },
          "key": "mymodel"
        }
      ]
    }
  }
}}

Ответы [ 3 ]

0 голосов
/ 24 мая 2018

Вы должны попробовать это для внутреннего объекта, вы получите true, если данные существуют во внутреннем свойстве и используете $.для внутреннего и $ .. для внутреннего из внутреннего и так далее ....

var valueQuery = jo.SelectTokens("$..results[*].value").Any();
if(valueQuery){
//Write your logic to retrieve data from object 
}

и извлечение значений из данных

0 голосов
/ 24 мая 2018

Если вы используете NewtonSoft, вы можете сделать следующее:

dynamic data= JsonConvert.DeserializeObject(Resource1.samplejson);
string myValue = data.result.execution-results.results[1].value

При условии, что ваша структура данных никогда не изменится.

В противном случае вы можете выполнить следующее и перейти кнужное вам значение при проверке того, что ожидаемые вами записи действительно находятся в json

Dictionary<string, object> values = data.ToObject<Dictionary<string, object>>();
if (values.ContainsKey("result") == true) 
{
// ... Go futher down
}
0 голосов
/ 24 мая 2018

Я не уверен, но это то, что вы хотели

var jo = JObject.Parse(json);

            Console.WriteLine(jo["result"]["execution-results"]["results"][1]["value"].Value<int>());

            dynamic jod = jo;

            Console.WriteLine(jod.result["execution-results"].results[1].value);
...