【问题标题】:JSON Parse error: Unexpected identifier "undefined" when trying to parse an object from an array (React-Native)JSON解析错误:尝试解析数组中的对象时出现意外的标识符“未定义”(React-Native)
【发布时间】:2020-02-24 01:40:04
【问题描述】:

我创建了一种在 AsyncStorage 中以我想要的方式存储数据的方法。这包括:

  1. 读取各种输入(各种数组)
  2. 将输入存储在包含多个数组的本地 this.state.object
  3. 字符串化this.state.object
  4. 将字符串化对象存储在临时数组中
  5. 将包含所有对象的数组分配给另一个状态,this.state.allObjects
  6. 字符串化“this.state.allObjects”
  7. 在 AsyncStorage 中存储字符串化数组

所有这一切的最终目标是拥有一个对象数组,每个对象代表相同类型的一个非常不同的实例(具有不同的参数等)。这可能不是最优雅的方法,但它似乎可以很好地存储和加载。

当我尝试解析来自 this.state.allObjects[x] 的任何内容时,就会出现问题。或者更确切地说,它只发生在我需要在加载它之后访问它的情况下。

在我的loadFromAsync 函数中,我完全能够执行this.state.allObjects = JSON.parse(fromAsync); 来获取字符串化对象的数组,然后var display = JSON.parse(this.state.allObjects[0]).name 来检索数组的第一个解析对象的名称。

当我尝试调用var display = JSON.parse(this.state.allObjects[0]).name 或更简单的<Text>{JSON.parse(this.state.allObjects[0]).name}</Text> 时,在此函数之外的任何时间我都会收到以下错误:

  • 运行时
const parse  = JSON.parse(this.state.allObjects[0]); 
//JSON Parse error: Unexpected identifier "undefined"
console.log(parse.name);
  • 以及运行时
const parse  = JSON.parse(this.state.allObjects[0]).name; 
//JSON Parse error: Unexpected identifier "undefined" + null is not an object (evaluating 'JSON.parse(this.state.allObjects[0]).name
console.log(parse);
  • 最后在跑步时
const parse  = JSON.parse(this.state.allObjects); 
//JSON Parse error: Unexpected EOF + JSON Parse error: Unexpected token ','

我假设 this.state.allObjects 在我的代码中的某处发生了变化,或者在某处附加了一个额外的},尽管它确实不应该。当我显示this.state.objectthis.state.allObjects[0] 时,它们的格式在视觉上完全相同。向this.state.allObjects 添加更多对象并显示每个字符串化组件也可以;这只是实际解析这些在原始加载函数之外不起作用的组件的问题。

我非常卡住。任何建议表示赞赏。如果我需要更改我的数据类型,那很好。用一个包含数组的字符串化对象组成的字符串化数组走到这一步,却无法解析它,这有点烦人。

【问题讨论】:

    标签: javascript arrays json reactjs react-native


    【解决方案1】:

    因为this.state.allObjects已经是JSON对象了。

    试试JSON.stringify()

    【讨论】:

    • <View>{this.state.allObjects}</View> 中,它完美地在屏幕上显示{"array1":"values","array2":"values"}{"array1":"values","array2":"values"}{"array1":"values","array2":"values"} 中的所有对象,例如3 个对象。内容仍然是字符串化的。
    • 试试..var a = {a: '1'}; JSON.parse(a); JSON.stringift(a);
    • 打印 var a 结果:[object Object]; JSON.stringify(a): {"a":"1"}; JSON.parse(a): JSON Parse error: Unexpected identifier "object";
    • 是的,因为 'a' 已经是 JSON 对象,所以我不知道你需要什么
    • 我相信我了解 .parse 和 .stringify 的工作原理......我只是不确定为什么上下文更改会导致我在上面看到的错误。
    猜你喜欢
    • 1970-01-01
    • 2018-11-28
    • 2020-12-11
    • 1970-01-01
    • 2018-03-15
    • 2021-01-05
    • 2013-11-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多