Как я могу преобразовать эту сложную строку в JSON с "" в значениях ключа? - PullRequest
1 голос
/ 12 марта 2020

Я пытаюсь преобразовать строку в 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;
}

Есть ли способ использовать регулярное выражение или эту функцию для получения ожидаемого результата с двойными кавычками (""), добавленными к каждому значению ключа?

Ответы [ 2 ]

1 голос
/ 12 марта 2020

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

const regStr = str
.replace(/:/g,'":"')
.replace(/,/g,'","')
.replace(/}","{/g,'"},{"')
.replace(/^\[{/,'[{"')
.replace(/}]$/, '"}]')


jsonResult = JSON.parse(regStr)
console.log(jsonResult);
1 голос
/ 12 марта 2020

Я должен как минимум сделать предположение, что все ваши КЛЮЧИ не содержат запятую. Потому что, скажем, у вас есть: {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')
)

Это будет результат:

enter image description here

...