私は辞書を初めて使いました。私は外部サイトからデータを引き出して、イニシアチブレベルのデータを含むJSON文字列を出力します.VBA-JSONコードを使用して解析するとhereが見つかりました。このJSONパーサーは、ネストされた辞書やコレクションを含むJSONディクショナリオブジェクトを出力します。このイニシアティブの3つの項目があるので2つ以上のネストされた辞書を1にマージし、カスタムオーダーでアイテムをアレンジする
{
"respCode": 200,
"respMessage": "OK",
"response": [
{
"INIT_ID": 1234567,
"INIT_NAME": "SOME INIT NAME",
"CATE": "PERFUMED WATER",
"CTRY": "GB",
"OPEN_DATE": "2016-02-10 00:00:00",
"ITEMS": [
{
"ITEM_ID": "44556677",
"ITEM_DSCR": "ABC CO, PERFUMED WATER,CARBONATED,AMBIENT,,,,CAFFEINE,PLASTIC,PACK,250ML"
},
{
"ITEM_ID": "45566778",
"ITEM_DSCR": "ABC CO, PERFUMED WATER,CARBONATED,CRYSTAL,,,,CAFFEINE,GLASS,PACK,270ML"
},
{
"ITEM_ID": "46576879",
"ITEM_DSCR": "ABC CO, PERFUMED WATER,NON-CARBONATED,AMBIENT,,,,NON-CAFFEINE,TETRA,PACK,275ML"
}
]
}
]
}
、私は別の3 API呼び出しを使用して外部のウェブサイトから、再びこれら3つの項目の属性データをプルする必要があります - 応答が再びJSON文字列で、私が持っていることこのように、ネストされた辞書やコレクションを含むDictionaryオブジェクトを取得するVBA-JSONを使用して解析:
ITEMを1:
{
"respCode": 200,
"respMessage": "OK",
"response": [
{
"ITEM CODE": "44556677",
"ITEM DESCRIPTION": "ABC CO, PERFUMED WATER,CARBONATED,AMBIENT,,,,CAFFEINE,PLASTIC,PACK,250ML",
"ATTR DETAILS": [
{
"ATTR ID": "25",
"ATTR DESCRIPTION": "MOD_NAME",
"ATTR_VAL ID": "22222222",
"ATTR_VAL DESCRIPTION": "PERFUMED WATER - CARBONATED - CAFFIENE"
},
{
"ATTR ID": "45",
"ATTR DESCRIPTION": "PROM ACTIVE",
"ATTR_VAL ID": "44444444",
"ATTR_VAL DESCRIPTION": "NO PROMO"
},
{
"ATTR ID": "38",
"ATTR DESCRIPTION": "BRAND",
"ATTR_VAL ID": "99999999",
"ATTR_VAL DESCRIPTION": "KANE & ABEL"
},
{
"ATTR ID": "51",
"ATTR DESCRIPTION": "WEIGHT/VOLUME",
"ATTR_VAL ID": "66666666",
"ATTR_VAL DESCRIPTION": "250ML"
}
]
}
]
}
ITEM 2:
{
"respCode": 200,
"respMessage": "OK",
"response": [
{
"ITEM CODE": "45566778",
"ITEM DESCRIPTION": "ABC CO, PERFUMED WATER,CARBONATED,CRYSTAL,,,,CAFFEINE,GLASS,PACK,270ML",
"ATTR DETAILS": [
{
"ATTR ID": "25",
"ATTR DESCRIPTION": "MOD_NAME",
"ATTR_VAL ID": "22222222",
"ATTR_VAL DESCRIPTION": "PERFUMED WATER, CRYSTAL - CARBONATED - CAFFIENE"
},
{
"ATTR ID": "45",
"ATTR DESCRIPTION": "PROM ACTIVE",
"ATTR_VAL ID": "44444444",
"ATTR_VAL DESCRIPTION": "PROMO"
},
{
"ATTR ID": "38",
"ATTR DESCRIPTION": "BRAND",
"ATTR_VAL ID": "99999999",
"ATTR_VAL DESCRIPTION": "BEAUTY & BEAST"
},
{
"ATTR ID": "51",
"ATTR DESCRIPTION": "WEIGHT/VOLUME",
"ATTR_VAL ID": "66666666",
"ATTR_VAL DESCRIPTION": "270ML"
}
]
}
]
}
ITEM 3:私は何をしたいです
{
"respCode": 200,
"respMessage": "OK",
"response": [
{
"ITEM CODE": "46576879",
"ITEM DESCRIPTION": "ABC CO, PERFUMED WATER,NON-CARBONATED,AMBIENT,,,,NON-CAFFEINE,TETRA,PACK,275ML",
"ATTR DETAILS": [
{
"ATTR ID": "25",
"ATTR DESCRIPTION": "MOD_NAME",
"ATTR_VAL ID": "22222222",
"ATTR_VAL DESCRIPTION": "PERFUMED WATER - NON-CARBONATED - NON-CAFFIENE"
},
{
"ATTR ID": "45",
"ATTR DESCRIPTION": "PROM ACTIVE",
"ATTR_VAL ID": "44444444",
"ATTR_VAL DESCRIPTION": "NO PROMO"
},
{
"ATTR ID": "38",
"ATTR DESCRIPTION": "BRAND",
"ATTR_VAL ID": "99999999",
"ATTR_VAL DESCRIPTION": "HENSEL & GRETEL"
},
{
"ATTR ID": "51",
"ATTR DESCRIPTION": "WEIGHT/VOLUME",
"ATTR_VAL ID": "66666666",
"ATTR_VAL DESCRIPTION": "275ML"
}
]
}
]
}
:各項目のようなそのアイテムIDで指定された各アイテムのマージされます属性ような第一イニシアティブ辞書との3つの項目の辞書をマージこの:
決勝辞書:
{
"respCode": 200,
"respMessage": "OK",
"response": [
{
"INIT_ID": 1234567,
"INIT_NAME": "SOME INIT NAME",
"CATE": "PERFUMED WATER",
"CTRY": "GB",
"OPEN_DATE": "2016-02-10 00:00:00",
"ITEMS": [
{
"ITEM_ID": "44556677",
"ITEM_DSCR": "ABC CO, PERFUMED WATER,CARBONATED,AMBIENT,,,,CAFFEINE,PLASTIC,PACK,250ML"
"ATTR DETAILS": [
{
"ATTR ID": "25",
"ATTR DESCRIPTION": "MOD_NAME",
"ATTR_VAL ID": "22222222",
"ATTR_VAL DESCRIPTION": "PERFUMED WATER - CARBONATED - CAFFIENE"
},
{
"ATTR ID": "45",
"ATTR DESCRIPTION": "PROM ACTIVE",
"ATTR_VAL ID": "44444444",
"ATTR_VAL DESCRIPTION": "NO PROMO"
},
{
"ATTR ID": "38",
"ATTR DESCRIPTION": "BRAND",
"ATTR_VAL ID": "99999999",
"ATTR_VAL DESCRIPTION": "KANE & ABEL"
},
{
"ATTR ID": "51",
"ATTR DESCRIPTION": "WEIGHT/VOLUME",
"ATTR_VAL ID": "66666666",
"ATTR_VAL DESCRIPTION": "250ML"
}
]
},
{
"ITEM_ID": "45566778",
"ITEM_DSCR": "ABC CO, PERFUMED WATER,CARBONATED,CRYSTAL,,,,CAFFEINE,GLASS,PACK,270ML"
"ATTR DETAILS": [
{
"ATTR ID": "25",
"ATTR DESCRIPTION": "MOD_NAME",
"ATTR_VAL ID": "22222222",
"ATTR_VAL DESCRIPTION": "PERFUMED WATER, CRYSTAL - CARBONATED - CAFFIENE"
},
{
"ATTR ID": "45",
"ATTR DESCRIPTION": "PROM ACTIVE",
"ATTR_VAL ID": "44444444",
"ATTR_VAL DESCRIPTION": "PROMO"
},
{
"ATTR ID": "38",
"ATTR DESCRIPTION": "BRAND",
"ATTR_VAL ID": "99999999",
"ATTR_VAL DESCRIPTION": "BEAUTY & BEAST"
},
{
"ATTR ID": "51",
"ATTR DESCRIPTION": "WEIGHT/VOLUME",
"ATTR_VAL ID": "66666666",
"ATTR_VAL DESCRIPTION": "270ML"
}
]
},
{
"ITEM_ID": "46576879",
"ITEM_DSCR": "ABC CO, PERFUMED WATER,NON-CARBONATED,AMBIENT,,,,NON-CAFFEINE,TETRA,PACK,275ML"
"ATTR DETAILS": [
{
"ATTR ID": "25",
"ATTR DESCRIPTION": "MOD_NAME",
"ATTR_VAL ID": "22222222",
"ATTR_VAL DESCRIPTION": "PERFUMED WATER - NON-CARBONATED - NON-CAFFIENE"
},
{
"ATTR ID": "45",
"ATTR DESCRIPTION": "PROM ACTIVE",
"ATTR_VAL ID": "44444444",
"ATTR_VAL DESCRIPTION": "NO PROMO"
},
{
"ATTR ID": "38",
"ATTR DESCRIPTION": "BRAND",
"ATTR_VAL ID": "99999999",
"ATTR_VAL DESCRIPTION": "HENSEL & GRETEL"
},
{
"ATTR ID": "51",
"ATTR DESCRIPTION": "WEIGHT/VOLUME",
"ATTR_VAL ID": "66666666",
"ATTR_VAL DESCRIPTION": "275ML"
}
]
}
]
}
]
}
は、最終的に私は最終的な辞書をループにしたいと、このようなワークシートの3列の3つの項目の詳細を表示:
誰かがこれを行う方法で私を導くことはできますか?
EDIT:
Sub GetJSON()
Dim XMLhttp As Object, oJSON As Object, oRTN As Object
Dim URL1$
Dim arrItemIDs() As Variant
Set oRTN = CreateObject("Scripting.Dictionary")
oRTN.comparemode = vbTextCompare
On Error GoTo ErrorHandler
With ThisWorkbook
Set wsMain = .Sheets("Main")
Set wsOut = .Sheets("Output")
URL = "http://11.27.141.15:8000/dev/getInit?" _
& "email=" & "[email protected]" & "&country=" & "GB" & "&initid=" & "1234567"
Set XMLhttp = CreateObject("MSXML2.ServerXMLHTTP")
With XMLhttp
.Open "GET", URL, False
.setRequestHeader "Content-Type", "application/json"
.setRequestHeader "Accept", "application/json"
.Send
If XMLhttp.ReadyState = 4 And XMLhttp.Status = 200 Then
Set oJSON = ParseJson(XMLhttp.ResponseText)
' ******CODE TO BE WRITTEN TO COLLECT THE ITEM IDs IN AN ARRAY*****
arrItemIDs = RecurseDictionary(oJSON)
' *****************************
For x = LBound(arrItemIDs) To UBound(arrItemIDs)
URL = "http://11.27.141.15:8000/dev/getItemAttr?" _
& "email=" & "[email protected]" & "&country=" & "GB" & "&itemid=" & arrItemIDs(x)
Set XMLhttp = CreateObject("MSXML2.ServerXMLHTTP")
With XMLhttp
.Open "GET", URL, False
.setRequestHeader "Content-Type", "application/json"
.setRequestHeader "Accept", "application/json"
.Send
If XMLhttp.ReadyState = 4 And XMLhttp.Status = 200 Then
Set oJSON = ParseJson(XMLhttp.ResponseText)
' ******CODE TO BE WRITTEN TO MERGE EACH ITEMS ATTRIBUTES JSON TO EARLIER INITIATIVES JSON *****
' *****************************
End If
End With
Next x
' ******CODE TO BE WRITTEN TO DUMP MERGED ARRAY OR DIC ON TO SHEET*****
i = 1
wsOut.Cells.ClearContents
' *****************************
End If
End With
End With
あなたはこれまで何を持っていますか?具体的にどこに問題がありますか?辞書をマージするか、出力シートを作成するだけですか? –
@TimWilliams以前はjsonオブジェクトや辞書で作業していなかったので、どのように出力を作成できるかわかりません。イニシアチブには複数の項目があるので、複数のAPI呼び出しによってjsonをダウンロードします。したがって、私は最終的なjsonは合併されたものでなければならないと考えました。 – sifar786
既にマージされたバージョンをワークシートにレンダリングするコードがない限り、余分な作業のように思えます。必要に応じて各アイテムをフェッチするだけです。あなたがしたいことはそれほど単純ではありませんが、コードで始める場合を除いて、ここにいる人々はジャンプしてあなたのために書くことはありません。 –