Javascript 将值转换为json/object并更新条目

Javascript 将值转换为json/object并更新条目,javascript,json,Javascript,Json,我有以下值“string like”,我想更新其中的一些值, 我该怎么做 这就是我在调试器中看到它的方式 var aa = "'[{key:10,key2:20}]'\r" 我需要将key的值更改为5,我应该怎么做(假设我有更多的key) 我尝试使用JSON.parse(aa),结果出现了错误 我还尝试使用aa[0]。key=5;这也不管用 你知道如何克服这个问题吗?你不能用\r解析,因为它不是一个有效的json字符串。首先替换它,然后尝试解析(注意,键带有“): 看小提琴: 您无法使用

我有以下值“string like”,我想更新其中的一些值, 我该怎么做

这就是我在调试器中看到它的方式

 var aa =   "'[{key:10,key2:20}]'\r"
我需要将key的值更改为5,我应该怎么做(假设我有更多的key)

我尝试使用
JSON.parse(aa)
,结果出现了错误

我还尝试使用
aa[0]。key=5
;这也不管用


你知道如何克服这个问题吗?

你不能用
\r
解析,因为它不是一个有效的json字符串。首先替换它,然后尝试解析(注意,键带有
):

看小提琴:


您无法使用
\r
进行分析,因为它不是有效的json字符串。首先替换它,然后尝试进行分析(请注意,键带有
):

看小提琴:


如果您无法控制输入,您可能不得不求助于使用
eval()
(尽管出于安全原因,我强烈不鼓励使用它)。如果可能的话,最好找到一种方法来获取原始输入以确认JSON

话虽如此,但这对我来说很有效:

//原始字符串
var aa=“'[{key:10,key2:20}]'\r”;
//首先,清理尾随文件\r\n
aa=aa.trim();//可能需要使用polyfill`.trim()`
//需要将其发送到JSO(JavaScript对象)
无功温度;
//为字符串赋值。
评估('temp='+aa);
//接下来,将该字符串作为JSO进行求值。
温度=蒸发(温度);
//做些改变
温度[0]。键=5;
//恢复aa
aa=“”+JSON.stringify(临时)+“\r”;
//输出到以获取可见性
document.getElementById('out').textContent=aa

如果您无法控制输入,您可能不得不求助于使用
eval()
(尽管出于安全原因,我强烈反对)。如果可能的话,最好找到一种方法来获取原始输入以确认JSON

话虽如此,但这对我来说很有效:

//原始字符串
var aa=“'[{key:10,key2:20}]'\r”;
//首先,清理尾随文件\r\n
aa=aa.trim();//可能需要使用polyfill`.trim()`
//需要将其发送到JSO(JavaScript对象)
无功温度;
//为字符串赋值。
评估('temp='+aa);
//接下来,将该字符串作为JSO进行求值。
温度=蒸发(温度);
//做些改变
温度[0]。键=5;
//恢复aa
aa=“”+JSON.stringify(临时)+“\r”;
//输出到以获取可见性
document.getElementById('out').textContent=aa

根据输入的差异,纯字符串方法可能是合适的。但是,这取决于可能使用的键的类型,
\r
被字符串操作剥离

函数replaceKeyValue(s,键,值){
//构建正则表达式以匹配键及其值
var re=new RegExp(“(\\W)”+key+”:[^,]+');
//将键替换为其新值
返回s.replace(关于“$1”+键+”:“+值);
}
var s=“'[{key:10,key2:20}]'\r”;

document.write(replaceKeyValue(s'key',5));/'[{key:5,key2:20}]
根据输入的差异,纯字符串方法可能是合适的。但是,这取决于可能使用的键的类型,
\r
被字符串操作剥离

函数replaceKeyValue(s,键,值){
//构建正则表达式以匹配键及其值
var re=new RegExp(“(\\W)”+key+”:[^,]+');
//将键替换为其新值
返回s.replace(关于“$1”+键+”:“+值);
}
var s=“'[{key:10,key2:20}]'\r”;

document.write(replaceKeyValue(s'key',5));/'[{key:5,key2:20}]
您提供的字符串看起来像控制台日志,它不是有效的json字符串。但它可能被转换成一个有效的

这将适用于一些简单的情况,可能正好适合您的需要

var aa=“'[{key:10,key2:20}]'\r”;
var lead=aa.match(/^\s*['“]/)[0];
var trail=aa.match(/['“]\s*$/)[0];
aa=aa.substr(lead.length,aa.length-trail.length-1);
aa=aa。替换(/(\w+):/g,“$1”:”);
var json=json.parse(aa);
json[0].key=5;
var log=document.getElementById('log');
log.innerText=lead+JSON.stringify(JSON)+trail;
log.innerText+='\n trail.length='+trail.length

您提供的字符串看起来像某个控制台日志,它不是有效的json字符串。但它可能被转换成一个有效的

这将适用于一些简单的情况,可能正好适合您的需要

var aa=“'[{key:10,key2:20}]'\r”;
var lead=aa.match(/^\s*['“]/)[0];
var trail=aa.match(/['“]\s*$/)[0];
aa=aa.substr(lead.length,aa.length-trail.length-1);
aa=aa。替换(/(\w+):/g,“$1”:”);
var json=json.parse(aa);
json[0].key=5;
var log=document.getElementById('log');
log.innerText=lead+JSON.stringify(JSON)+trail;
log.innerText+='\n trail.length='+trail.length

很遗憾,这不是有效的JSON。然而,您可能可以
eval('temp='+aa)
它,尽管我不鼓励尽可能使用
eval
eval(eval('[{key:10,key2:20}]'\r')
。您可以编写自己的解析器,如果输入这么简单,看起来就不难了。RegExp构造函数可能也有帮助。不幸的是,这不是有效的JSON。然而,您可能可以
eval('temp='+aa)
它,尽管我不鼓励尽可能使用
eval
eval(eval('[{key:10,key2:20}]'\r')
。您可以编写自己的解析器,如果输入这么简单,看起来就不难了。RegExp构造函数可能也会有帮助。如果OP可以控制输入,这就太好了。但是(也许我是在做一个假设)它们看起来不是这样的。谢谢,但我尝试了一下,在JSON.parse中我得到了错误[SyntaxError:Unexpected token'],知道吗?如果OP可以控制输入,这很好。B
 var aa =   '[{"key":10,"key2":20}]\r'.replace("\r", "");
 JSON.parse(aa);