Проблема форматирования JSON - разбор файла JSON в VB.NET
Я использую "System.Text.Json". Файл JSON содержит несколько значений, разделенных запятыми, код работает только для одного блока данных Json. Если я использую все данные целиком, он не анализирует их и выдает мне исключение о '[' и ','. Чего не должно быть, разве я что-то упускаю? Пожалуйста, смотрите приведенный ниже код и данные Json
Вот мой код для этого класса:
Public Class query Public Property RN As String Public Property QUERY_ID As String Public Property QTYPE As String Public Property SENDERNAME As String Public Property SENDEREMAIL As String Public Property SUBJECT As String Public Property DATE_RE As String Public Property DATE_R As String Public Property DATE_TIME_RE As String Public Property GLUSR_USR_COMPANYNAME As String Public Property READ_STATUS As Object Public Property SENDER_GLUSR_USR_ID As Object Public Property MOB As String Public Property COUNTRY_FLAG As String Public Property QUERY_MODID As String Public Property LOG_TIME As String Public Property QUERY_MODREFID As Object Public Property DIR_QUERY_MODREF_TYPE As Object Public Property ORG_SENDER_GLUSR_ID As Object Public Property ENQ_MESSAGE As String Public Property ENQ_ADDRESS As String Public Property ENQ_CALL_DURATION As Object Public Property ENQ_RECEIVER_MOB As Object Public Property ENQ_CITY As String Public Property ENQ_STATE As String Public Property PRODUCT_NAME As String Public Property COUNTRY_ISO As String Public Property EMAIL_ALT As String Public Property MOBILE_ALT As String Public Property PHONE As Object Public Property PHONE_ALT As Object Public Property IM_MEMBER_SINCE As Object Public Property TOTAL_COUNT As String End ClassОсновной код формы:
Imports System.IO Imports System.Text.Json Imports System.Text.Json.Serialization Public Class Form1 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim json As String = File.ReadAllText("~\test2.txt") Dim feed = JsonSerializer.Deserialize(Of query)(json) MsgBox(feed.ENQ_MESSAGE) End Sub End ClassВот данные JSON
[ { "RN": "1", "QUERY_ID": "1519852833", "QTYPE": "W", "SENDERNAME": "Name1", "SENDEREMAIL": "xyz@gmail.com", "SUBJECT": "Requirement for Black PP Granules", "DATE_RE": "30 Sep 2020", "DATE_R": "30-Sep-20", "DATE_TIME_RE": "30-Sep-2020 11:34:46 PM", "GLUSR_USR_COMPANYNAME": "Company Name1", "READ_STATUS": null, "SENDER_GLUSR_USR_ID": null, "MOB": "+91-1111111111", "COUNTRY_FLAG": "", "QUERY_MODID": "DIRECT", "LOG_TIME": "20200930233446", "QUERY_MODREFID": null, "DIR_QUERY_MODREF_TYPE": null, "ORG_SENDER_GLUSR_ID": null, "ENQ_MESSAGE": "My Requirement is for Black PP Granules.", "ENQ_ADDRESS": "Address1", "ENQ_CALL_DURATION": null, "ENQ_RECEIVER_MOB": null, "ENQ_CITY": "Panipat", "ENQ_STATE": "Haryana", "PRODUCT_NAME": "Black PP Granules", "COUNTRY_ISO": "IN", "EMAIL_ALT": "xyz11@gmail.com", "MOBILE_ALT": "+91-11111111111", "PHONE": null, "PHONE_ALT": null, "IM_MEMBER_SINCE": null, "TOTAL_COUNT": "178" }, { "RN": "2", "QUERY_ID": "1519834488", "QTYPE": "W", "SENDERNAME": "Name2", "SENDEREMAIL": "xyz2@gmail.com", "SUBJECT": "Requirement for SHRILON Nylon Granules", "DATE_RE": "30 Sep 2020", "DATE_R": "30-Sep-20", "DATE_TIME_RE": "30-Sep-2020 11:04:12 PM", "GLUSR_USR_COMPANYNAME": "Company Name2", "READ_STATUS": null, "SENDER_GLUSR_USR_ID": null, "MOB": "+91-22222222222", "COUNTRY_FLAG": "", "QUERY_MODID": "DIRECT", "LOG_TIME": "20200930230412", "QUERY_MODREFID": null, "DIR_QUERY_MODREF_TYPE": null, "ORG_SENDER_GLUSR_ID": null, "ENQ_MESSAGE": "Requirement2", "ENQ_ADDRESS": "Address2", "ENQ_CALL_DURATION": null, "ENQ_RECEIVER_MOB": null, "ENQ_CITY": "Chennai", "ENQ_STATE": "Tamil Nadu", "PRODUCT_NAME": "SHRILON Nylon Granules", "COUNTRY_ISO": "IN", "EMAIL_ALT": null, "MOBILE_ALT": "+912222222", "PHONE": null, "PHONE_ALT": null, "IM_MEMBER_SINCE": null, "TOTAL_COUNT": "178" } ]
Что я уже пробовал:
Я попытался подтвердить формат данных Json. Json является правильным и допустимым (RFC8259). Чтобы заставить это работать, я должен удалить '[]' и использовать только один блок данных внутри '{}'. Если я использую все данные целиком, он не анализирует их и выдает мне исключение о '[' и ','.
Я также попробовал Newtonsoft Json и столкнулся с той же проблемой.
Sandeep Mewara
2 вещи:
1. Вы проверили весь json, а не только один блок, что форматирование JSON является хорошим. Если нет, то я бы предложил использовать любой онлайн-инструмент, чтобы быстро проверить, является ли весь json допустимым json. (https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=&cad=rja&uact=8&ved=2ahUKEwi30fuqwZrsAhWD7HMBHVNMBRkqfjaaegqiahac&url=https%3A%2F%2Fjsonlint.com%2F&usg=AOvVaw1wm0AnA86fJrIoZRGRzp6P)
2. было бы полезно, если бы вы поделились точной ошибкой, которую вы получаете, и любой трассировкой стека для справки.
MaverickSingh
1. Я проверила весь JSON, а не просто заблокировать. результат возвращает допустимый json.
2. вот ошибка : системе.Текст.В формате JSON.JsonException: 'значение JSON не может быть преобразовано в ExportToExcel.запрос. Путь: $ | LineNumber: 0 | BytePositionInLine: 1.'
Richard MacCutchan
Каково точное сообщение? Глядя на ваши данные, кажется, что перед открывающейся квадратной скобкой отсутствует какой-то элемент, что-то вроде "{"mydata":"
что указывает на массив наборов JSON.
MaverickSingh
Системы.Текст.В формате JSON.JsonException: 'значение JSON не может быть преобразовано в ExportToExcel.запрос. Путь: $ | LineNumber: 0 | BytePositionInLine: 1.'
MaverickSingh
это возврат JSON с помощью API. Я должен проверить все данные Json на https://jsonformatter.curiousconcept.com/ и он говорит, что json действителен (RFC8259)
MaverickSingh
Вот полный текст сообщения об ошибке:
Системы.Текст.В формате JSON.Исключение JsonException
HResult=0x80131500
Message=значение JSON не может быть преобразовано в ExportToExcel.запрос. Путь: $ | LineNumber: 0 | BytePositionInLine: 1.
Источник=Система.Текст.В JSON
Трассировка стека:
в System.Text.Json.Метательница.ThrowJsonException_DeserializeUnabletoconvertvalue(тип propertyType)
в System.Text.Json.JsonSerializer.HandleStartArray(JsonSerializerOptions вариантов, Utf8JsonReader&амп; читатель, ReadStack&амп; государство)
в System.Text.Json.JsonSerializer.ReadCore(JsonSerializerOptions вариантов, Utf8JsonReader&амп; читатель, ReadStack&амп; readStack)
в System.Text.Json.JsonSerializer.ReadCore(тип_возвращаемого_значения типа, JsonSerializerOptions вариантов, Utf8JsonReader&амп; читатель)
в System.Text.Json.JsonSerializer.Десериализовать(JSON-строку, тип_возвращаемого_значения типа, JsonSerializerOptions варианты)
в System.Text.Json.JsonSerializer.Десериализация[TValue](String json, JsonSerializerOptions options)
в ExportToExcel.Form1.Button1_Click(отправитель объекта, EventArgs e) в H:\Dotnet_projects\ExportToExcel\Form1.vb:line 13.
в системе.Окна.Формы.Контроль.OnClick(EventArgs e)
в системе.Окна.Формы.Кнопка.OnClick(EventArgs e)
в системе.Окна.Формы.Кнопка.OnMouseUp(MouseEventArgs mevent)
в системе.Окна.Формы.Контроль.WmMouseUp(Message& m, кнопка MouseButtons, Int32 клика)
в системе.Окна.Формы.Контроль.WndProc(сообщение& m)
в системе.Окна.Формы.ButtonBase.WndProc(сообщение& m)
в системе.Окна.Формы.Кнопка.WndProc(сообщение& m)
в системе.Окна.Формы.Контроль.ControlNativeWindow.OnMessage(сообщение& m)
в системе.Окна.Формы.Контроль.ControlNativeWindow.WndProc(сообщение& m)
в системе.Окна.Формы.Родное окно.DebuggableCallback(hwnd элемента указателя IntPtr, int32 и глутамат натрия, указателя IntPtr параметр wparam, указателя IntPtr lparam должен)
в системе.Окна.Формы.Небезопасные методы.DispatchMessageW(MSG& msg)
в системе.Окна.Формы.Приложение.ComponentManager.Система.Окна.Формы.Небезопасные методы.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
в системе.Окна.Формы.Приложение.ThreadContext.RunMessageLoopInner(Int32 причина, контекст ApplicationContext)
в системе.Окна.Формы.Приложение.ThreadContext.RunMessageLoop(Int32 причина, контекст ApplicationContext)
в корпорации Microsoft.На языке VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Онран()
в корпорации Microsoft.На языке VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel()
в корпорации Microsoft.На языке VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(строка[] командная строка)
в ExportToExcel.My.MyApplication.Main(String[] Args) in :строка 81
Это исключение было первоначально брошено в этот стек вызовов:
[внешний код]
ExportToExcel.Form1.Button1_Click(Объект, Система.EventArgs) в Form1.vb
[внешний код]