json - 通过 AJAX 加载 json 时,Roku ParseJSON 给出未知标识符错误

标签 json roku brightscript

我正在尝试编写一个简单的 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/

相关文章:

javascript - 如何使用 JS 或 PHP 使用 Google Map URL 获取(多边形)区域的 KML 或 JSON 数据

javascript - 从数组中的 JSON 对象中查找最大值并将其合并

javascript - 像矩阵一样访问 javaScript 对象数组

roku - 有没有一种编程方法可以阻止 Roku 进入屏幕保护模式?

geolocation - 如何获取 Roku 的设备地理位置?

roku - 如何在 Roku 中使用圆形 ImageView ..?

json - 使用 d3.js 创建动态词云

ssl - Roku https 请求失败

youtube - 如何在我的 Roku channel 中流式传输 Youtube 视频?

Roku:如何更改标签文字大小