【问题标题】:JSON Object not correct formatted into JavascriptJSON 对象未正确格式化为 Javascript
【发布时间】:2020-11-05 03:44:20
【问题描述】:

我想在 JavaScript 中使用 JSON 对象作为键 -> 值数组,但我不明白为什么它没有以我想要的方式返回我的对象​​:

我尝试了以下方法:

var obj = JSON.stringify(result);

var result = Object.keys(obj).map(function (key) { 

    // Using Number() to convert key to number type 
    // Using obj[key] to retrieve key value 
    return [Number(key), obj[key]]; 
}); 

for(var i = 0; i < result.length; i++) { 
    for(var z = 0; z < result[i].length; z++) { 
        console.log(result[i][z]); 
    } 
    
} 

但我在 console.log 中得到以下行

writeback.js:159 0
writeback.js:159 "
writeback.js:159 1
writeback.js:159 {
writeback.js:159 2
writeback.js:159 \
writeback.js:159 3
writeback.js:159 "
writeback.js:159 4
writeback.js:159 r
writeback.js:159 5
writeback.js:159 o
writeback.js:159 6
writeback.js:159 w
writeback.js:159 7
writeback.js:159 n
writeback.js:159 8
writeback.js:159 u
writeback.js:159 9
writeback.js:159 m
writeback.js:159 10
writeback.js:159 b
writeback.js:159 11
writeback.js:159 e
writeback.js:159 12
writeback.js:159 r
writeback.js:159 13
writeback.js:159 \
writeback.js:159 14
writeback.js:159 "
writeback.js:159 15
writeback.js:159 :
writeback.js:159 16
writeback.js:159 1
writeback.js:159 17
writeback.js:159 ,
writeback.js:159 18
writeback.js:159 \
writeback.js:159 19
writeback.js:159 "
writeback.js:159 20
writeback.js:159 I
writeback.js:159 21
writeback.js:159 D
writeback.js:159 22
writeback.js:159 \
writeback.js:159 23
writeback.js:159 "
writeback.js:159 24
writeback.js:159 :
writeback.js:159 25
writeback.js:159 1
writeback.js:159 26
writeback.js:159 }
writeback.js:159 27
writeback.js:159 {
writeback.js:159 28
writeback.js:159 \
writeback.js:159 29
writeback.js:159 "
writeback.js:159 30
writeback.js:159 r
writeback.js:159 31
writeback.js:159 o
writeback.js:159 32
writeback.js:159 w
writeback.js:159 33
writeback.js:159 n
writeback.js:159 34
writeback.js:159 u
writeback.js:159 35
writeback.js:159 m
writeback.js:159 36
writeback.js:159 b
writeback.js:159 37
writeback.js:159 e
writeback.js:159 38
writeback.js:159 r
writeback.js:159 39
writeback.js:159 \
writeback.js:159 40
writeback.js:159 "
writeback.js:159 41
writeback.js:159 :
writeback.js:159 42
writeback.js:159 2
writeback.js:159 43
writeback.js:159 ,
writeback.js:159 44
writeback.js:159 \
writeback.js:159 45
writeback.js:159 "
writeback.js:159 46
writeback.js:159 I
writeback.js:159 47
writeback.js:159 D
writeback.js:159 48
writeback.js:159 \
writeback.js:159 49
writeback.js:159 "
writeback.js:159 50
writeback.js:159 :
writeback.js:159 51
writeback.js:159 2
writeback.js:159 52
writeback.js:159 }
writeback.js:159 53
writeback.js:159 "

似乎 JSON 对象中的每个字符都获得了一个键,但键和值在对象本身中。

UPDATE:变量result的值是

{"rownumber":1,"ID":1}{"rownumber":2,"ID":2}

有人可以帮我解决这个问题吗?

【问题讨论】:

  • JSON.stringify() 创建一个字符串,而不是一个对象。
  • 如果已有对象,直接处理即可,不需要转成JSON。
  • 也发布您的输入对象
  • @KunalMukherjee 我编辑了原始帖子并发布了输入对象。
  • 有没有一种方法可以将结果的值编辑为数组中的两个正确格式的 json 对象,或者将结果组合成一个 json 对象?就目前而言,您首先需要将该字符串解析为两个对象,然后再尝试将其作为常规 json 对象进行操作。

标签: javascript jquery node.js arrays json


【解决方案1】:

似乎您将Object 传递给JSON.stringify,它将对象转换为String(参见@Barmar 的第一条评论)。

换行

var obj = JSON.stringify(result);

进入

var obj = result;

=== 编辑 ===

OP更新问题后,上面的建议其实还不足以解决问题。

输入是String,内容如下:

'{"rownumber":1,"ID":1}{"rownumber":2,"ID":2}'

由于它不是有效的 JSON 字符串,因此仅使用 JSON.parse 是不够的。首先,需要将字符串拆分为 2 个单独的“对象描述”,然后将其中的每一个都传递给 JSON.parse

var splitted = result.
  split('}{'). // <-- split in 2
  map((partialObjectStr, i) => {
    return JSON.parse( // <-- parse into object
      i < 1 
        ? `${partialObjectStr}}` // <-- add right } before parsing
        : `{${partialObjectStr}` // <-- add left { before parsing
    );
  });

var objA = splitted[0];
var objB = splitted[1];

console.log(objA);
console.log(objB);

【讨论】:

  • 现在我得到了相同的结果,但字符更少,因为它删除了我的 obj 变量中的所有“\”和“””符号。问题是我想作为参数给出的 obj函数的输入是一个字符串,但我需要它们作为两个单独的对象 {"rownumber":1,"ID":1}{ rownumber: 2, ID: 2 }。我该怎么做?
  • 如果您需要准确的答案,您需要提供所有信息;-) 我的答案是基于猜测result 的初始值是多少。反过来,该猜测基于您在控制台中显示为输出的内容。请编辑您的问题,我会完善我的答案。
  • 我发布了输入对象和值。够了吗?
【解决方案2】:

如果你想在内存中改变或复制,你应该包装 JSON.parse()

var obj = JSON.parse(JSON.stringify(result));

否则只需删除 JSON.stringify()

var obj = result;

【讨论】:

  • 完全不需要。这会将Object 转换为String,然后再转换为Object。只需省略 JSON.parseJSON.stringify 就会得到相同的结果。
  • @david stringify+parse 将克隆对象,而 obj=result 将指向同一个对象。
  • @freedomn-m 是的,从技术上讲你是正确的。但是,对于已经陈述的问题,这个解决方案并没有添加任何有助于解决问题的有价值的信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-03-20
  • 2021-10-20
  • 2018-06-12
  • 1970-01-01
  • 2018-10-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多