gpt4 book ai didi

Javascript正则表达式用双引号包裹不带引号的JSON值(不是键)

转载 作者:太空宇宙 更新时间:2023-11-03 22:50:50 26 4
gpt4 key购买 nike

我一直在尝试用双引号括起一些格式错误的 JSON 值。响应来 self 无法控制的 Java Servlet(它实际上是一个 HashMap )。我已经设法从中得到它:

{ response={ type=000, products=[{id=1,name=productone},{id=2,name=producttwo}],status=success}}

对此:

{"response": { "type": 000, "products": [{"id": 1,"name": productone},{"id": 2,"name": producttwo}],"status": success}}

使用以下正则表达式:

hashmap  =  hashmap
.replace (/ /g,"").replace(/\s/g,"") //replace all spaces
.replace (/'/g,"").replace(/"/g,'') //replace all quotes
.replace(/=/g,":") //replace = with :
.replace(/(['"])?([a-z0-9A-Z_]+)(['"])?:/g, '"$2": '); //put quotes around keys

我如何使用正则表达式将值用双引号括起来。非常感谢任何帮助。

编辑:

我最终希望它采用这种形式:

{"response": { "type": "000", "products": [{"id": "1","name": "productone"},{"id": "2","name": "producttwo"}],"status": "success"}}

最佳答案

这是一种根据需要引用所有键和值的方法:

hashmap = hashmap.replace(/ /g, '')                  // strip all spaces
.replace(/([\w]+)=/g, '"$1"=') // quote keys
.replace(/=([\w]+)/g, ':"$1"') // quote values
.replace(/=([[{])/g, ':$1'); // = to : before arrays and objects also

这会产生:

{"response":{"type":"000","products":[{"id":"1","name":"productone"},{"id":"2","name":"producttwo"}],"status":"success"}}

现在您可以使用以下方法将其转换为 JavaScript 对象:

obj = JSON.parse(hashmap);

但是,更符合 JSON 解析的做法是不要引用数值,而是将它们解析为数字,如下所示:

hashmap = hashmap.replace(/ /g, '')
.replace(/([\w]+)=/g, '"$1"=')
.replace(/=([a-zA-Z_]+)/g, ':"$1"')
.replace(/=([\d]+)/g, function(m, num) {return ':'+parseFloat(num)})
.replace(/=([[{])/g, ':$1')

这会产生:

{"response":{"type":0,"products":[{"id":1,"name":"productone"},{"id":2,"name":"producttwo"}],"status":"success"}}

关于Javascript正则表达式用双引号包裹不带引号的JSON值(不是键),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45099150/

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