Ошибка при разборе JSON через библиотеку VBA-JSON - PullRequest
0 голосов
/ 27 сентября 2019

Я получаю

ошибка времени выполнения 13 Несоответствие типов

в строке Cells(i,1).value=item("fp").

Не знаю, почему предмет можетне будет выбран.Поскольку вы можете наблюдать файл json, он имеет значение «fp» как «042018»

Sub Jsonread()
Dim FSO As New FileSystemObject
Dim JsonTS As TextStream
Dim jsonText As String
Dim jsonObject As Object
Dim item As variant

Set JsonTS = FSO.OpenTextFile("C:\Users\Abd\retoffline_others.json", ForReading)
jsonText = JsonTS.ReadAll
JsonTS.Close

Dim i As Long

Set jsonObject = JsonConverter.ParseJson(jsonText)

i = 3

For Each item In jsonObject
    Cells(i, 1) = item("fp")
    Cells(i, 2) = item("sply_ty")
    i = i + 1
Next

End Sub

Выдержка из файла json выглядит следующим образом

{
  "name": "Flip",
  "fp": "042018",
  "filing_typ": "M",
  "gt": 0,
  "cur_gt": 0,
  "b2cs": [
    {
      "csamt": 0,
      "sply_ty": "INTRA"
    },

1 Ответ

0 голосов
/ 27 сентября 2019

Прежде всего, JSON, который вы показали, недействителен.Он заканчивается ,, но вместо запятой это должен быть ]}, чтобы сделать его действительным примером JSON:

{
    "name": "Flip",
    "fp": "042018",
    "filing_typ": "M",
    "gt": 0,
    "cur_gt": 0,
    "b2cs": [{
        "csamt": 0,
        "sply_ty": "INTRA"
    }]
}

Код 1: допустимый пример JSON, который можетиспользуйте код, приведенный ниже.

Убедитесь, что вы помещаете в анализатор только действительные данные JSON.Если вы дадите неверные данные, анализатор повесит трубку или в лучшем случае выдаст ошибку.

Option Explicit

Public Sub Jsonread()
    Dim FSO As New FileSystemObject
    Dim JsonTS As TextStream
    Set JsonTS = FSO.OpenTextFile("C:\Users\Abd\retoffline_others.json", ForReading)

    Dim jsonText As String
    jsonText = JsonTS.ReadAll
    JsonTS.Close

    Dim jsonObject As Object
    Set jsonObject = JsonConverter.ParseJson(jsonText)

    Debug.Print jsonObject("fp")
    Debug.Print jsonObject("b2cs")(1)("sply_ty")
End Sub

Код 2: код VBA для анализа JSON из кода 1.

Объяснение:

jsonObject("b2cs") означает следующее:

"b2cs": [{
    "csamt": 0,
    "sply_ty": "INTRA"
}]

, тогда jsonObject("b2cs")(1) получит первый элемент в [] скобок, которые обозначают следующее:

{
    "csamt": 0,
    "sply_ty": "INTRA"
}

и, наконец, jsonObject("b2cs")(1)("sply_ty") - это элемент, который вы искали, и это приведет к:

042018
INTRA
...