我正在尝试编写一个简单的 Roku 应用程序。
当我通过roURLTransfer
加载JSON文件时,ParseJSON函数给我BRIGHTSCRIPT:错误:ParseJSON:未知标识符
。
如果我通过 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)
我需要从互联网加载数据,而使用嵌入式版本对我没有帮助。有谁知道我应该做什么才能让它发挥作用?
最佳答案
“未知标识符”错误通常是因为 json 字符串中存在 ParseJson()
不支持的字符。 ReadAsciiFile()
起作用的原因可能是因为该函数通过应用 UTF-8 编码“清理”json 字符串。
导致此问题的一些 JSON 响应开头出现的常见字符是 unicode 字符 Byte Order Mark (BOM)
如果您搜索“字节顺序标记 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 有效)。
关于json - 通过 AJAX 加载 json 时,Roku ParseJSON 给出未知标识符错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61387828/