Парсер VBA Json с тем же значением имени Парсер VBA json - PullRequest
0 голосов
/ 29 января 2020

У меня есть следующие JSON данные

  "data": [
        {
            "id": "816051",
            "type": "jobs",
            "links": {
                "careersite-job-url": "https://workoab.teamtailor.com/jobs/gdsgds",
                "careersite-job-apply-url": "https://workoab.teamtailor.com/jobs/816051-0220-gdsgds/applications/new?secret=d93b3a3a-c433-4564-a21c-d07096060365",
                "careersite-job-apply-iframe-url": "https://workoab.teamtailor.com/jobs/816051-0220-gdsgds/applications/new?iframe=true&secret=d93b3a3a-c433-4564-a21c-d07096060365",
                "self": "https://api.teamtailor.com/v1/jobs/816051"
            },
            "attributes": {
                "apply-button-text": "",
                "body": "<p>Används ej.</p>",
                "end-date": null,
                "human-status": "unlisted",
                "internal": false,
                "picture": null,
                "pinned": false,
                "start-date": null,
                "status": "unlisted",
                "tags": [],
                "title": "blablablabal",
                "pitch": "Används ej.",
                "external-application-url": "",
                "name-requirement": "optional",
                "resume-requirement": "optional",
                "cover-letter-requirement": "optional",
                "phone-requirement": "optional",
                "created-at": "2020-01-24T09:19:53.940+01:00",
                "sharing-image-layout": "default",
                "mailbox": "job-d93b3a3a-c433-4564-a21c-d07096060365@inbound.teamtailor.com"
            },
            "relationships": {
                "stages": {
                    "links": {
                        "self": "https://api.teamtailor.com/v1/jobs/816051/relationships/stages",
                        "related": "https://api.teamtailor.com/v1/jobs/816051/stages"
                    },
                    "data": [
                        {
                            "type": "stages",
                            "id": "4494024"
                        },
                        {
                            "type": "stages",
                            "id": "4494023"
                        },
                        {
                            "type": "stages",
                            "id": "4494022"
                        },
                        {
                            "type": "stages",
                            "id": "4494021"
                        },
                        {
                            "type": "stages",
                            "id": "4494020"
                        },
                        {
                            "type": "stages",
                            "id": "4494019"
                        },
                        {
                            "type": "stages",
                            "id": "4494018"
                        },
                        {
                            "type": "stages",
                            "id": "4494017"
                        },
                        {
                            "type": "stages",
                            "id": "4494016"
                        },
                        {
                            "type": "stages",
                            "id": "4494015"
                        },
                        {
                            "type": "stages",
                            "id": "4494014"
                        },
                        {
                            "type": "stages",
                            "id": "4494013"
                        },
                        {
                            "type": "stages",
                            "id": "4494012"
                        },
                        {
                            "type": "stages",
                            "id": "4494011"

Я пытаюсь получить все идентификаторы с помощью VBA jsonparser, но мне не удается получить его - я могу получить все другие данные ... ау.

Я пытался использовать Select Case item.name и Case "data" - но тогда я не знаю, как вызвать эти данные - или, возможно, моя идея просто неверна. Ie Я попытался ниже "для каждого элемента" добавить "выберите регистр" id ", но это только что дало мне ошибку ..

Мой код в настоящее время похож на это - который не возвращает различные уровни" id "

Option Explicit
Sub getdata()
Dim ws As Worksheet: Set ws = Worksheets("Datalastcall")
Sheets("DataLastCall").Select
Dim i As Long
i = 2
Dim nexturl As String
nexturl = "https://api.teamtailor.com/v1/jobs?include=stages&filter%5Bstatus%5D=unlisted"
Dim http As Object
Dim Url As String
Set http = CreateObject("WinHttp.WinHttpRequest.5.1")
    With http
        .Open "Get", Url, False
        .SetRequestHeader "Accept", "application/vnd.api+json"
        .SetRequestHeader "X-Api-Version", "20161108"
        .SetRequestHeader "Authorization", "My Token"
        .Send
    End With
JSONresp = http.ResponseText
Set jsonObject = JsonConverter.ParseJson(JSONresp)
Dim dataitem1 As Dictionary
Dim dataitem2 As Dictionary
Dim p As Long
p = 3
For Each dataitem1 In jsonObject("data")
    ws.Cells(i, 1) = dataitem1("attributes")("title")
    ws.Cells(i, 2) = dataitem1("id")
    last = jsonObject("links")("last")
    nexturl = jsonObject("links")("next")
    For Each dataitem2 In dataitem1("relationships")("stages")("data")
        ws.Cells(i, p) = dataitem2("id")
       p=p+1 
    Next
i = i + 1
p=3
Next

End Sub

Я получаю недопустимую процедуру. Я пробовал несколько других способов соединения с (1), так как кажется, что второй набор данных - это другой массив, и выберите case et c, но я не могу заставить его работать .. код работает нормально, получая все остальные данные для меня. Я также пытался переключаться между «как словарь» и «как объект»

Я был бы очень признателен за любую помощь в том, как получить разные «Идентификаторы находятся под этапами. Я предполагаю, что проблема заключается в нескольких уровнях одинаковых имен вариантов. ie и« данные », и« идентификатор »?

output now looks like this... ie not getting each different stage id - and not matchning to my other "gets"
Jobname      JobID Stageid1 Stageid2 Stageid3
Blablajobb   1234  567      567      567
BLANK?!      Blank 568      568      568

1 Ответ

0 голосов
/ 30 января 2020

Я не совсем уверен, какую библиотеку вы используете для этого, поэтому я не смог ее протестировать. Но я предполагаю, что сначала вам понадобится словарь Item или 2. Вы должны выполнить итерацию по первому массиву данных, а затем по базовому массиву данных в объекте relationships/stages. Примерно так должно работать:

Dim dataItem1 As Dictionary, dataItem2 As Dictionary
For Each dataItem1 In jsonObject("data")
    For Each dataItem2 In dataItem1("relationships")("stages")("data")
        ws.Cells(i, p) = dataItem2("id")
        ws.Cells(i, p + 1) = dataItem2("id")
        ws.Cells(i, p + 3) = dataItem2("id")
        i = i + 1
    Next
Next

или если вам нужен только первый элемент из данных (или есть только один элемент на вызов), вы также можете сделать:

Dim dataItem1 As Dictionary
For Each dataItem1 In jsonObject("data")(1)
    ws.Cells(i, p) = dataItem1("id")
    ws.Cells(i, p + 1) = dataItem1("id")
    ws.Cells(i, p + 3) = dataItem1("id")
    i = i + 1
Next
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...