【问题标题】:Why is JSON.parse(JSON.stringify(json)) != json?为什么 JSON.parse(JSON.stringify(json)) != json?
【发布时间】:2019-05-10 02:02:52
【问题描述】:

我在互联网上搜索了答案,我发现JSON.stringify() 不能转换例如函数,只能转换纯数据。

但是这个答案不能满足我的需要。

由于AsyncStorage 的工作方式,我需要将我通过fetch 请求的json 保存在一个字符串中 所以我将jsonContent 保存为字符串化版本(jsonContent 是获取的json

var temp = JSON.stringify(jsonContent);

稍后我需要重新调用它,因此我将其返回为 json 格式,但它不接受将输出作为 json 输出。

var output = JSON.parse(temp);

我要获取的json 是:

{
    "content": [{
        "name": "this",
        "desc": "is",
        "explanation": "just a",
        "time": "test",
        "class": "with one",
        "image": "item",
        "id": "0",
        "l_name": "testing"
    }]
}

jsonContent的获取版本(这个可以用,pre-stringify&parse):

Object {
   "content": Array [
     Object {
       "class": "with one",
       "desc": "is",
       "explanation": "just a",
       "id": "0",
       "image": "item",
       "l_name": "testing",
       "name": "this",
       "time": "test",
     },
   ],
 }

jsonContent 的获取版本(这个不可用,post-stringify&parse):

Object {
   "content": Array [
     Object {
       "class": "with one",
       "desc": "is",
       "explanation": "just a",
       "id": "0",
       "image": "item",
       "l_name": "testing",
       "name": "this",
       "time": "test",
     },
   ],
 }

原始代码:

如何修复我的 json 以便我可以使用 JSON.stringify(JSON.parse(jsonContent))

如果您需要更多信息,请询问。 感谢您的宝贵时间。

【问题讨论】:

  • 它们在用法上是相同的,但是它们是两个不同的对象,具有完全相同的属性,并且相等运算符(==,===)只有在它们是同一个对象时才会返回true。不要将 console.log 显示的内容与您的实际对象混淆。

标签: json parsing react-native stringify asyncstorage


【解决方案1】:

我会根据你的问题来回答。 JSON.stringify 转换为 json。然后 Json.parse 给出一个数组。因此,该数组不等于您的 json

【讨论】:

  • 这完全不准确。
  • @ReyYoung JSON.parse 不会给你一个数组,除非你给它一个,这里不是这样。两者不相等的原因是因为 JavaScript 在引用相等而不是值相等上比较非基元。解析后的版本看起来不同的原因只是 console.log 格式。这个“答案”既没有提到,也包含事实不准确。
【解决方案2】:

这是因为 javascript 中的对象和数组是通过引用进行评估的。当您执行 JSON.parse(JSON.stringify(responseJson)) 时,会使用新引用创建一个新数组。当 JavaScript 引擎尝试使用那里的引用评估对象时,他会遇到不同的引用,这就是它返回 false 的原因。

如果要检查两个对象,则必须使用循环遍历对象的每个值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-06
    • 1970-01-01
    • 1970-01-01
    • 2018-06-25
    • 1970-01-01
    • 2014-09-11
    • 2018-03-10
    • 1970-01-01
    相关资源
    最近更新 更多