JSON 对象未正确格式化为 Javascript
Posted
技术标签:
【中文标题】JSON 对象未正确格式化为 Javascript【英文标题】:JSON Object not correct formatted into 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 对象进行操作。
【参考方案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.parse
和 JSON.stringify
就会得到相同的结果。
@david stringify+parse 将克隆对象,而 obj=result 将指向同一个对象。
@freedomn-m 是的,从技术上讲你是正确的。但是,对于已经陈述的问题,这个解决方案并没有添加任何有助于解决问题的有价值的信息。以上是关于JSON 对象未正确格式化为 Javascript的主要内容,如果未能解决你的问题,请参考以下文章
如何将 JSON 数据格式化为动态生成对象属性的 C# 对象