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

时间:2017-07-14 09:16:03

标签: javascript json node.js regex hashmap

我一直试图用双引号包装一些格式错误的JSON值。响应来自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"}}

1 个答案:

答案 0 :(得分:2)

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

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"}}