Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.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
JsonConverter的问题_Json_Vba_Parsing - Fatal编程技术网

JsonConverter的问题

JsonConverter的问题,json,vba,parsing,Json,Vba,Parsing,这是我用来在vba中调用parseJson的代码,在我有一个JSON对象的情况下,我收到了错误10001,它与最新的JSON vba库2.2.3有关,而“{或”[“是预期的 Sub jsontest() Dim http As Object Set http = CreateObject("MSXML2.XMLHTTP") 'http.Open "GET", "https://bin.codingislove.com/document/ayequrimiy", False http.Open "

这是我用来在
vba
中调用
parseJson
的代码,在我有一个
JSON
对象的情况下,我收到了
错误10001
,它与最新的
JSON vba库2.2.3
有关,而
“{
”[“
是预期的

Sub jsontest()
Dim http As Object
Set http = CreateObject("MSXML2.XMLHTTP")
'http.Open "GET", "https://bin.codingislove.com/document/ayequrimiy", False
http.Open "GET", "https://bin.codingislove.com/ayequrimiy.json", False


http.send
MsgBox (ParseJson(http.responseText)("Count"))
End Sub
第二个
.json
文件显示了
10001错误
,但第一个文件,即文本形式的同一个文件,正在完美执行。在调用
json
字符串时,我也尝试了使用括号,但没有成功


我应该在解析器调用中更正什么?

因为这不是JSON响应,所以必须先将其设置为JSON响应,然后才能对其进行解析。最简单的方法是加载页面的DOM,然后提取文本

在SO()上有很多代码片段可以做到这一点。 获得DOM后,执行以下操作:

json = doc.getElementById("box").innerText
{
    "data":
        "{
            \"Count\":1,
            \"results\":
                [
                    {
                        \"showEmailIcon\":true,
                        \"showIcon\":true,
                        \"middleName\":\"\",
                        \"dateActivated\":1513000,
                        \"regAffiliateRebate\":\"No Rebate(0)\",
                        \"Id\":1,
                        \"dateLastLogin\":1513248842000,
                        \"countryName\":\"France\",
                        \"address\":null,
                        \"name\":\"cien\",
                        \"id\":1786511,
                        \"state\":null
                    }
                ],
            \"resultClass\":\"com.zoho.dao.dto\"
        }",
    "key":"ayequrimiy"
}

使用开发人员工具调用第二个url
https://bin.codingislove.com/ukiyerovow.json
,可以看到
json
是从url
https://bin.codingislove.com/documents/ukiyerovow
像这样:

json = doc.getElementById("box").innerText
{
    "data":
        "{
            \"Count\":1,
            \"results\":
                [
                    {
                        \"showEmailIcon\":true,
                        \"showIcon\":true,
                        \"middleName\":\"\",
                        \"dateActivated\":1513000,
                        \"regAffiliateRebate\":\"No Rebate(0)\",
                        \"Id\":1,
                        \"dateLastLogin\":1513248842000,
                        \"countryName\":\"France\",
                        \"address\":null,
                        \"name\":\"cien\",
                        \"id\":1786511,
                        \"state\":null
                    }
                ],
            \"resultClass\":\"com.zoho.dao.dto\"
        }",
    "key":"ayequrimiy"
}
使用
Json vba库
可以像这样解析此strign

Sub jsontest()
    Dim http As Object
    Set http = CreateObject("MSXML2.XMLHTTP")
    ' use this url instaed:
    Const url As String = "https://bin.codingislove.com/documents/ayequrimiy"
    http.Open "GET", url, False
    http.send

    Dim parsedJson As Dictionary
    Set parsedJson = JsonConverter.ParseJson(http.responseText)

    Dim data As String
    data = parsedJson("data")

    Dim parsedData As Dictionary
    Set parsedData = ParseJson(data)

    MsgBox parsedData("Count")
End Sub
我应该在解析器调用中更正什么

  • 您必须更正url。第二个url应为
    https://bin.codingislove.com/documents/ayequrimiy
    。这里有
    json
    数据
比较:

要获取例如
名称
,您必须使用包含数组的
结果
,因此首先使用索引指向数组的元素,例如
(1)
,然后获取元素
(“名称”)


如果您在浏览器中打开第二个链接并查看源代码,您将看到那里没有json。json是通过javascript获取的。
MSXML.XMLHTTP
不执行您的javascript,因此没有json。@PalleDue,那么它如何与第一个链接做相同的事情。它是相同的文件,但是文本。但这是我的主要问题。我需要解析器调用以某种方式将.json url转换为另一个url,以便我可以使用它。这是实验性的,但我需要解析的所有页面都是.json,我不能简单地将它们逐个手动转换为文本。我的答案是否回答了您的问题?这是您在评论中写的另一个问题?还是添加
数据的问题de>元素?是的,现在我明白了。所以基本上我应该传递不带.json的url,但是如果我的文件实际上是.json,但是它们的url没有显示.json,那么在这种情况下我应该怎么做呢?如果你试图用相同的代码解析更多的url,你可能需要检查
数据
元素。如果
数据
是演示,然后使用额外的步骤将
数据
获取为类似
parsedJson(“数据”)的字符串
。结果就是预期的字典。或者可能我不明白你的问题是什么。对此表示抱歉。是的,我替换了json的url,它工作正常。现在我只需要知道我所有json文件的来源。谢谢。在我的情况下,加载don是没有用的,因为我处理的是w使用动态页面,它将只返回静态对象。我可能弄错了吗?我想你弄错了。加载DOM是从网页中提取文本的最平滑的方法,不管是动态的还是非动态的。我尝试查看此网页的响应文本:但只收到msxml2的源代码。在这种情况下,我如何声明don对象?首先-打开在web浏览器中打开页面,然后打开控制台。在那里键入以下语句:document.getElementById(“box”)。innerText如果这给出了预期的结果,那么您就得到了所需的内容。它在控制台中工作,但我编写了下面的解析器,但出现了错误438,奇怪,我疯了。Private Sub parsehtml()Dim http作为对象,html作为新的HTMLDocument,文档作为对象集http=CreateObject(“MSXML2.XMLHTTP”)http.Open“GET”,False http.send http.getElementById(“box”)。innerText=http.responseText-MsgBox(http.responseText)End Sub