如何将复杂的字符串转换为键值中带有“”的JSON?

问题描述 投票:1回答:1

我正在尝试将字符串转换为json。

var str = "[{Value:0.64,Rate:Hourly,Description:Hourly if more than 50 hours,Upper Limit:null},{Value:1.68,Rate:Hourly,Description:Hourly if less than 400 hours,Upper Limit:500}]"

我尝试使用stringify和parse,但这没有用。

我尝试了以下功能:

function getJsonData(query){
    let arrayOfKeyValues = query.split(',');
    let modifiedArray =  new Array();
    console.log(arrayOfKeyValues);
    for(let i=0;i< arrayOfKeyValues.length;i++){
        let arrayValues = arrayOfKeyValues[i].split(':');
        let arrayString ='"'+arrayValues[0]+'"'+':'+'"'+arrayValues[1]+'"';
        modifiedArray.push(arrayString);
    }
    let jsonDataString = '{'+modifiedArray.toString()+'}';
    let jsonData = JSON.parse(jsonDataString);
    console.log(jsonData);
    console.log(typeof jsonData);
    return jsonData;
}

是否有使用正则表达式或此函数的方法,以使用双引号(“”)获得预期的输出每个键值?

json regex javascript-objects
1个回答
0
投票

我至少要假设您的所有键都不包含逗号。因为,说您有:{a:b,c,d:e}是否应该是{a:“ b”,“ c,d”:“ e”}或{a:“ b,c”,d:“ e”}

为简单起见,我还假设您的键或值中没有{,},:字符...

表达式是:

JSON.parse(
  str
  .replace(new RegExp('{','g'),'{"')
  .replace(new RegExp('}','g'),'"}')
  .replace(new RegExp(':','g'),'":"')
  .replace(new RegExp(',([^{][^,]*:)','g'),'","$1')
)
© www.soinside.com 2019 - 2024. All rights reserved.