Как получить конкретное значение из строки Json без десериализации всей строки в классы - PullRequest
0 голосов
/ 24 октября 2018

Я довольно новичок в разборе Json.Из моего Json (см. Ниже) я хотел бы извлечь значение id (присутствует в разделе данных) в данный момент.

{
    "data": [{
            "date": "2018-10-10 10:50:00",
            "vehicle_id": 11,
            "accept_phone": true,
            "phone": "070000000",
            "accept_email": true,
            "email": "abe@abeprakash.com",
            "details": "Special Very",
            "user_id": "3378",
            "id": 11513,
            "team_id": 2806,

            "user_info": {
                "id": 3378,
                "name_first": "abe",
                "name_last": "prakash",
                "name_full": "abe prakash ",
                "email": "abe@abeprakash.com",
                "phone": "070000000",
                "ratings_count": 0
            },

                "recipient": {
                    "name": "Tim ",
                    "email": "Dev@journease.co.uk",
                    "phone": "+44 (0)117 9586 180"
                },
                "footer_text": "",
                "invoice_logo": "",
                "including_vat": 0
            },
            "distance_in_miles": 0,
            "vehicle": {
                "id": 11,
                "name": "Abe Car",
                "icon": "\/assets\/uploads\/vehicles\/11.svg",
                "sort_no": 8,
                "size": 800
            }
        }
    ],
    "properties": []
}

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

Попробуйте 1 (topLevelResponseэто не что иное, как идентификатор в строке json имеет значение)

Dim responseReader As New StreamReader(response.GetResponseStream())
                    'Use the below variable to see the rawJson
                    Dim rawJsonResponseString = ""
                    Using rawJsonResponseStream As Stream = response.GetResponseStream()
                        Dim reader As StreamReader = New StreamReader(rawJsonResponseStream, Encoding.UTF8)
                        rawJsonResponseString = reader.ReadToEnd()
                    End Using
Dim topLevelResponse As JObject = JObject.Parse(rawJsonResponseString)("data").SelectToken("id")

Попробуйте 2 (я не хочу перебирать, чтобы найти идентификатор, так как может быть загружено больше элементов в jsonответ в будущем)

Dim token As JToken = CType(topLevelResponse.SelectToken("data"), JArray)

Любая помощь очень ценится, ребята.Как вы, ребята, заметили, я использую VB.net и Json.net.Спасибо.

Попробуйте 3 (Я получил значение, но теперь уверен, что неплохо бы жестко закодировать, где значение, хотя в данных всегда будет одна позиция)

Dim extractID = JObject.Parse (rawJsonResponseString) .SelectToken ("data [0] .id")

Ответы [ 2 ]

0 голосов
/ 26 октября 2018

Лучший способ, который я нашел до сих пор, и согласно комментариям от членов стека ниже

Dim extractID = JObject.Parse (rawJsonResponseString) .SelectToken ("data [0] .id")

0 голосов
/ 24 октября 2018

Вот правильный JSON:

{"data": [{"date": "2018-10-1010: 50: 00", "vehicle_id": 11, "accept_phone": правда, "телефон": "070000000", "accept_email": правда, "электронная почта": "abe@abeprakash.com", "детали": "SpecialVery", "user_id": "3378", "идентификатор": 11513"team_id": 2806, "user_info": { "ID": 3378, "name_first": "Абэ", "name_last": "Пракаш", "name_full": "abeprakash", "Отправить": "Абэ @ abeprakash.com», "телефон": "070000000", "ratings_count": 0}, "получатель": { "имя": "Тим", "электронная почта:" "Dev@journease.co.uk", "телефон":": +44 (0) 1179586180"}, "footer_text": "", "invoice_logo": "", "including_vat": 0, "distance_in_miles": 0, "транспортное средство": { "ID": 11, "название": "AbeCar", "icon": "/ assets / uploads / Vehicles / 11.svg", "sort_no": 8, "size": 800}}], "properties": []}

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

Вернемся к теме, существует несколькопути, но здесь самый короткий, как вы просили.

Визуализированные шаги:

{JSON}

{
  "data":[+], '<<< ("data")
  "properties":[+]
}

{
  "data":[
    {+} '<<< first, that is (0)
  ],
  "properties":[+]
}

{
  "data":[
    {
      "date":"2018-10-1010:50:00",
      "vehicle_id":11,
      "accept_phone":true,
      "phone":"070000000",
      "accept_email":true,
      "email":"abe@abeprakash.com",
      "details":"SpecialVery",
      "user_id":"3378",
      "id":11513, '<<< ("id")
      "team_id":2806,
      "user_info":{+},
      "recipient":{+},
      "footer_text":"",
      "invoice_logo":"",
      "including_vat":0,
      "distance_in_miles":0,
      "vehicle":{+}
    }
  ],
  "properties":[+]
}

Dim test As JObject = JObject.Parse(TextBox1.Text)
Dim test1 = test("data")(0)("id") 'test1 = 11513

Вы должны проверить объект JO с точкой останова и посмотреть, как выглядит формат, чтобы узнать, как получить то, что вы хотите.Массивы по номерам, остальные по имени (или ключ, если хотите).

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