gpt4 book ai didi

json - cordova readAsText 返回无法解析为 JSON 对象的 json 字符串

转载 作者:行者123 更新时间:2023-12-02 20:59:23 25 4
gpt4 key购买 nike

我使用 http 和 cordova 文件 readAsText 函数读取 json 文件。

http请求返回一个对象,这是可以的。

cordova 文件 readAsText 函数返回“字符串”,其中包含额外的“r\n\”符号。这使得无法使用 JSON.parse(evt.target.result)

function readJson(absPath, success, failed){
window.resolveLocalFileSystemURL(absPath, function (entry) {
entry.file(function (file) {
var reader = new FileReader();
reader.onloadend = function (evt) {
success(evt.target.result);
};
reader.readAsText(file);
}, failed);
}, failed);
}

readJson(cordova.file.dataDirectory + 'my.json', function(res){
console.log(JSON.parse(res)); //here I've got an parsing error due to presence of r\n\ symbols
}, failed );

如何使用cordova读取JSON文件?

更新:

有趣的是,以下内容有效:

a = '{\r\n"a":"1",\r\n"b":"2"\r\n}';
b = JSON.parse(a);

所以问题不仅仅在于\r\n...cordova readAsText 添加了其他内容

更新2

作为我现在使用的解决方法var object = eval("("+ res + ")")

仍在寻找加载json对象的通用方法...

最佳答案

没有人回答这个问题,我只需要为我的项目解决它,所以我将发布我的解决方案。

readAsText 方法输出一个字符串,因此您实际上可以对其运行替换,但您需要做的是使用 RegExp 来查找换行符。这是我的解决方案:

 var sanitizerRegex = new RegExp(String.fromCharCode(10), 'g');
var sanitizedData = JSON.parse(result.replace(sanitizerRegex, ''));

我使用 String 方法 fromCharCode 来获取特定的换行符和“g”标志来匹配整个字符串中的所有实例。您的字符串解决方案的问题是您无法使用反斜杠和“n”的字符进行字符串替换,因为问题是实际的换行符,它仅表示为“\n”。

我不知道 JSON.parse 无法处理换行符的原因,也不知道为什么文件插件会引入这个问题,但这个解决方案似乎对我有用。

此外,如果可以避免的话,切勿像这样使用 eval,尤其是在来自 JSON 文件等源的输入时。即使在 cordova 应用程序中,使用 eval 也可能非常不安全。

关于json - cordova readAsText 返回无法解析为 JSON 对象的 json 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26887706/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com