Member 13358124 Ответов: 2

Как добавить записи в существующий массив JSON?


Imports Newtonsoft.Json
 
 Public Class root
        Public Property book As item()
    End Class

    Public Class item
        Public Property Name As String
        Public Property Expiry As DateTime
        Public Property Price As Double
        Public Property Sizes As String()
    End Class

Существующий JSON,
{"book":[{"Name":"tea","Expiry":"2020-01-01T00:00:00","Price":80.0,"Sizes":null}]}

Я хочу добавить еще один элемент в вышеприведенную строку Json с помощью VB2010.
Результат должен быть,
{"book":[{"Name":"tea","Expiry":"2020-01-01T00:00:00","Price":80.0,"Sizes":null}{"Name":"milk","Expiry":"2020-04-01T00:00:00","Price":180.0,"Sizes":null}]}

У меня нет идеи добавлять новые данные в существующий JSON..Помочь мне..

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

Imports Newtonsoft.Json

 Public Class root
        Public Property book As item()
    End Class

    Public Class item
        Public Property Name As String
        Public Property Expiry As DateTime
        Public Property Price As Double
        Public Property Sizes As String()
    End Class

Richard Deeming

NB: Если вы собираетесь добавлять элементы, вам, вероятно, будет проще объявить свойство в виде списка, а не массива. Оба будут работать с вашим JSON.

Public Property book As List(Of item)

2 Ответов

Рейтинг:
20

OriginalGriff

Вы этого не делаете, вы создаете новое item например , заполните его детали, добавьте его в свой экземпляр root и сгенерируйте из него новый JSON. Когда вы создаете данные JSON, они включают в себя все изменения, внесенные в данные, хранящиеся в вашем VB-коде.

JSON не следует редактировать напрямую: это не база данных - это формат передачи данных, и его следует создавать непосредственно перед отправкой или сохранением.


Member 13358124

Спасибо!

Рейтинг:
1

Pinto E Anto

Пожалуйста, следуйте приведенному ниже коду. Я тестировал для проекта, который я делаю в VS2019 15.9.2 VB.net

Мои Данные Json :

{
  "Logs": [
    {
      "Time": "Mar 22 2020  4:17AM",
      "Log": "New Alarm Logged"
    },
    {
      "Time": "Mar 23 2020  7:37AM",
      "Log": "Deleted automatically because Alarm is cleared."
    }
  ]
}

Нам нужно добавить журналы активности с отметками времени ( вот что я пытаюсь сделать to do ), что довольно похоже на ваше приложение.
Объявление класса как показано ниже
Imports Newtonsoft.Json

Public Class Log
Public Property Time As String
Public Property Log As String
End Class

Public Class ActivityLog
Public Property Logs As New List(Of Log) 'Note the usage of New List(of ..)
End Class

Теперь мы сделаем функцию для сбора данных, которые будут введены в массив журнала объекта json.
Public Function _json_Fn_LogAppend(ByVal InJson As String, ByVal InValue As String) As String
_json_Fn_LogAppend = "" 'Pass a blank string to avoid null errors.
Try
Dim _ActivityLog As ActivityLog = New ActivityLog 
Dim _Log As Log = New Log
_Log.Time = Now().ToLongDateString
_Log.Log = InValue
_ActivityLog = JsonConvert.DeserializeObject(Of ActivityLog)(InJson) 'Deserialize existing Data
_ActivityLog.Logs.Add(_Log) 'Add the new data to array. Make sure logs (array in json ) to be declared as List (of..)
_json_Fn_LogAppend = JsonConvert.SerializeObject(_ActivityLog, Formatting.Indented) 'Serialize the Json again.
Console.WriteLine(_json_Fn_LogAppend)
Return _json_Fn_LogAppend
Catch ex As Exception
Console.WriteLine("ERROR/EX  From Function <_json_Fn_LogAppend> : " + ex.ToString)
End Try
Return _json_Fn_LogAppend
End Function

Использование функции где
Dim JsonDataCompiled As String = _json_Fn_LogAppend(Json, "Deleted automatically because Alarm is cleared.")

Json в функции-это существующие данные json.