Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VBA-JSON:将条目添加到现有文件_Json_Excel_Vba - Fatal编程技术网

VBA-JSON:将条目添加到现有文件

VBA-JSON:将条目添加到现有文件,json,excel,vba,Json,Excel,Vba,我正在使用excel通过VBA-JSON库修改现有的JSON,并且我正在有效地尝试做javascript中的push所做的事情,在嵌套数组中添加另一个条目 前面有一个问题说明了我正在尝试做什么,但是在创建JSON文件的范围内 被接受的答案虽然很有帮助,但并没有告诉我如何在不完全重建的情况下添加到我已经拥有的内容中。我可以想象一堆循环,将我现有的文件解析成字符串,然后执行类似于文章中的操作。我很好奇有没有别的办法 下载json 设置json=JsonConverter.ParseJson(H.r

我正在使用excel通过VBA-JSON库修改现有的JSON,并且我正在有效地尝试做javascript中的push所做的事情,在嵌套数组中添加另一个条目

前面有一个问题说明了我正在尝试做什么,但是在创建JSON文件的范围内

被接受的答案虽然很有帮助,但并没有告诉我如何在不完全重建的情况下添加到我已经拥有的内容中。我可以想象一堆循环,将我现有的文件解析成字符串,然后执行类似于文章中的操作。我很好奇有没有别的办法

下载json 设置json=JsonConverter.ParseJson(H.responseText) Debug.print json(1)(“条目”)(1)(“日期”) '2019-09-25 json(1)(“条目”)(2)(“日期”)=“2019-09-26” '错误9下标超出范围 '上传json
[
{
“条目”:[
{
“日期”:2019-09-25,
“a”:1,
“b”:2
}
]
}
]

我可以访问和修改现有条目,但不能添加到其中。我猜这是因为库将其解析为定义的数组而不是变量?有什么简单的解决方案吗?或者我必须先将文件解构为字典/集合并重建它吗?

VBA Json实际上只是将Json字符串转换成一组嵌套的字典和集合的廉价(且有效)转换器/解压器。因此,您不必“将[您的]文件解构为字典/集合并重建它”,因为。。。已经是了。这就是为什么需要添加Microsoft脚本运行库才能使用它

您所面临的困难是,您将
json
对象中的每个对象都视为字典。相反,您希望将
添加到
条目
集合中。在VBA JSON中(据我所见),如果一个对象是一个键/值对,那么它就是一个
字典
,如果它只是一个没有
的对象,那么它就是一个
集合
。我敢肯定这里有更多的细微差别,但在这种情况下效果很好

考虑:

Sub test()
    Dim Json As Object
    Set Json = JsonConverter.ParseJson("[{""Entries"":[{""Date"": 2019-09-25,""a"": 1,""b"": 2}]}]")

    Dim entry1 As Object
    Set entry1 = Json(1)("Entries")

    Stop '<--inspect Locals and see that we have a Collection here

    'Add to the collection (different then adding to a dictionary)
    'We will add a dictionary to the collection though
    Json(1)("Entries").Add New Dictionary

    'Now add to the dictionary.
    Json(1)("Entries")(2).Add "Date", "2019-09-26"

    Stop

    Debug.Print JsonConverter.ConvertToJson(Json)

    'Alternatively you could create the dictionary and add your keys, then `pop` your entries
    Dim Entry As Dictionary
    Set Entry = New Dictionary
    Entry.Add "Date", "2019-09-26"
    Entry.Add "a", "2"
    Entry.Add "b", "3"

    Json(1)("Entries").Add Entry

    Debug.Print JsonConverter.ConvertToJson(Json)
End Sub

我想另一种思考方法是,如果我们想向
条目添加一个新数组
,那么我们必须向
条目
集合添加一个新的
字典
对象。然后我们可以将键/值对添加到字典中,如
Date
a
b

这太完美了!谢谢你的解释和代码。我想投票表决,但我还不能。有选择的编辑也是有用的参考,这就是我在看到你最初的反应后的想法。太棒了!我很高兴你看到了编辑。我在重读答案,我觉得。。。“嗯……如果我先创建了字典,然后将它添加到收藏中,这会更有意义。”@jnevil和OP:Brilliant approach,非常明显,至少对我来说,它隐藏在普通视图中。谢谢。要添加0.02$:
Json(1)(“条目”)(2)。添加“日期”,数组(“2019-09-26”、“2019-01-23”、“2020-01-24”)
[{"Entries":[{"Date":"2019-09-25","a":1,"b":2},{"Date":"2019-09-26"}]}]