Roku ParseJSON 在将 json 加载到 AJAX 时出现未知标识符错误

Roku ParseJSON gives Unknow Identifier error when loading json via AJAX

我正在尝试编写一个简单的 Roku 应用程序。

当我通过 roURLTransfer ParseJSON 函数加载 JSON 文件时,我得到 BRIGHTSCRIPT: ERROR: ParseJSON: Unknown identifier.

如果我通过 ReadAsciiFile("pkg:/feed/feed.json") 加载 JSON 文件,它就可以工作。

JSON 文件是相同的,我很确定我的 JSON 是正确的。

url = "http://192.168.1.36/misc/roku/ifilm/feed.json"
result = ""
timeout = 10000

ut = CreateObject("roURLTransfer")
ut.SetPort(CreateObject("roMessagePort"))
ut.SetURL(url)
if ut.AsyncGetToString()
    event = wait(timeout, ut.GetPort())
    if type(event) = "roUrlEvent"
        result = event.GetString()
    elseif event = invalid
        ut.AsyncCancel()
    else
        print "roUrlTransfer::AsyncGetToString(): unknown event"
    end if
end if

' `print result` shows the correct lintable JSON
' print result
' Next line gives me: BRIGHTSCRIPT: ERROR: ParseJSON: Unknown identifier
json = ParseJSON(result)

但是将 JSON 文件放入应用程序中是可行的:

feed = ReadAsciiFile("pkg:/feed/feed.json")
sleep(2000)

json = ParseJson(feed)

我需要从 Internet 加载数据,使用嵌入式版本对我没有帮助。有谁知道我应该怎么做才能让它发挥作用?

"Unknown identifier"错误通常是因为json字符串中有一个ParseJson()不支持的字符。 ReadAsciiFile() 起作用的原因可能是因为函数 "cleans up" 通过应用 UTF-8 编码得到 json 字符串。

导致此问题的某些 JSON 响应开头出现的常见字符是 unicode 字符 Byte Order Mark (BOM)

如果你 google "byte order mark json" 你会看到很多情况下这也会影响其他平台。

您可以在尝试解析字符串之前执行简单的查找和替换以删除该字符。

bomChar = Chr(65279)
if result.left(len(bomChar)) = bomChar ' Check if the string has the BOM char prefix
    result = result.replace(bomChar, "")
end if

如果这不起作用,那么您的回复可能有一些其他冲突的字符,在这种情况下我建议使用 ifUrlTransfer::AsyncGetToFile() 而不是 AsyncGetToString() 然后使用 ReadAsciiFile()每次都应该保证格式正确的 json 字符串(只要您的 json 有效)。