Dennis Schank Ответов: 2

Разбор сложного JSON с помощью VB.NET


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

В JSON ниже, если бы кто-то мог показать мне какой-то код, который привел бы меня к trainId поле (около 10 строк снизу), я, вероятно, мог бы выяснить все остальное из этого, так как это был бы один из самых глубоких уровней этого JSON.

{
    "properties" : {
        "messageType" : "tripOrderRequest",
        "sentDateTime" : "2017-08-10T11:40:01.454Z",
        "senderId" : "1",
        "recipientId" : "2",
        "messageIntExt" : "external",
        "eventTypeVersion" : "1.1"
    },
    "body" : {
        "tripOrderId" : "d0b0f506-acbc-42f3-b712-bed7c60ff6b5",
        "shortKey" : "0ff6b5",
        "requestedVanHub" : "Oklahoma City, OK",
        "requestedVanHubID" : "1beff5b5-2cd3-41d3-9e34-f45a10717045",
        "tripOrderItinerary" : [ {
            "sequence" : 1,
            "type" : "P",
            "status" : "P",
            "associatedTripId" : "0bb3ab5d-9f08-488f-89f3-b07b072b6d51",
            "locationId" : "d78888a4-a6da-4c8c-b2d8-fbdd4b332394",
            "locationLat" : 36.116381,
            "locationLong" : -96.010583
        },{
            "sequence" : 2,
            "type" : "D",
            "status" : "P",
            "associatedTripId" : "0bb3ab5d-9f08-488f-89f3-b07b072b6d51",
            "locationId" : "c7016a4f-da4b-41d0-9f93-b38af1c36827",
            "locationLat" : 36.097914,
            "locationLong" : -95.865680
        } ],
        "tripDetails" : [ {
            "tripId" : "0bb3ab5d-9f08-488f-89f3-b07b072b6d51",
            "shortKey" : "2b6d51",
            "sequence" : 10,
            "pickupLocation" : {
                "adhoc" : {
                    "lat" : 36.116381,
                    "lng" : -96.010583         
                },
                "knownLocation" : {
                    "lat" : 36.116381,
                    "lng" : -96.010583,
                    "locationId" : "d78888a4-a6da-4c8c-b2d8-fbdd4b332394",
                    "name" : "Tulsa OK",
                    "address" : "1631 W 33RD PL, Tulsa, Oklahoma, 74107",
                    "radioChannel" : 51
                }
            },
            "dropOffLocation" : {
                "adhoc" : {
                    "lat" : 36.097914,
                    "lng" : -95.865680              
                },
                "knownLocation" : {
                    "lat" : 36.097914,
                    "lng" : -95.865680,
                    "locationId" : "c7016a4f-da4b-41d0-9f93-b38af1c36827",
                    "name" : "Tulsa - Cherokee YA OK",
                    "address" : "1631 W 33RD PL, Tulsa, Oklahoma, 74107",
                    "radioChannel" : 52
                }
            },
            "pickupSchedule" : {
                "preferredTimeZone" : "CDT",
                "needDateTime" : "2017-09-10T11:40:01.454Z",
                "pickupDateTime" : "2017-09-10T12:40:01.454Z"
            },
            "conveyance" : {
                "crew" : {
                    "crewMember" : [ {
                        "sequence" : 1,
                        "name" : "John Doe",
                        "id" : "x8888"
                    },{
                        "sequence" : 2,
                        "name" : "Johnny Doe",
                        "id" : "x8885"
                    } ],
                    "associatedTrainDetails" : {
                        "trainId" : "HPASLVJ113A",
                        "leadLocomotiveId" : "BNSF 2347"
                    }
                },
                "equipments" : [],
                "passenger" : []
            }
        } ] 
    }
}


Что я уже пробовал:

Я нашел способы разбора простого JSON с помощью Newtonsoft.В JSON но, похоже, не может приспособить его, чтобы добраться до более глубоких уровней. Мне не хватает крайнего срока, чтобы сделать это.

A_Griffin

Просто интересно, как ты справляешься с этим? Я согласен, что онлайн-справка/документация для работы со сложными структурами JSON паршива до несуществования - что действительно странно, поскольку на нее должен быть большой спрос. Я наконец-то понял это, если тебе все еще нужна помощь...

Dennis Schank

David_Wimbley предоставил мне ответ ниже. Спасибо.

2 Ответов

Рейтинг:
2

computer.us@aimint.org

Если имя поля, которое вы ищете, уникально для строки json, то это самый простой способ, который я нашел:
https://www.codeproject.com/Tips/1176910/Easy-JSON-Recursion-in-VB-NET-with-Nested-Levels?msg=5531222#xx5531222xx

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


Рейтинг:
18

David_Wimbley

Я бы взял ваш json и использовал jsonutils[^]. Это преобразует ваш сложный JSON в классы, которые вы можете использовать для сериализации/десериализации вашего JSON, не пытаясь написать свой собственный синтаксический анализатор. Таким образом, как только вы получите классы, вы должны быть в состоянии сделать что-то вроде Private pp As Properties = JsonConvert.DeserializeObject(Of Properties)(json)

Этот VB может быть не совсем точным синтаксисом, так как я обычно не работаю с VB.


Dennis Schank

Прекрасно! Спасибо за помощь, Дэвид!