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