Javascript 如何在不改变数字键顺序的情况下编辑JSON中的数字键?
我有以下几个问题:Javascript 如何在不改变数字键顺序的情况下编辑JSON中的数字键?,javascript,json,regex,string,edit,Javascript,Json,Regex,String,Edit,我有以下几个问题: var jsonTest = `{ "S-5" : "18", "5": "19", "5AA" : "20", "456" : "5", "word": "51" }`; 我想在数字键(“5”和“456”)周围添加括号。我不能使用J
var jsonTest = `{
"S-5" : "18",
"5": "19",
"5AA" : "20",
"456" : "5",
"word": "51"
}`;
我想在数字键(“5”
和“456”
)周围添加括号。我不能使用JSON.parse()
,因为它将对JSON对象中的键重新排序。只有数字的键将首先出现,然后是其他键。我必须不惜一切代价维持钥匙的秩序
我不想使用任何库好吧!我已经弄明白了。我会补充一个很长的答案:
var jsonTest=`{
“S-5”:“18”,
"5": "19",
“5AA”:“20”,
"456" : "5",
“单词”:“51”
}`;
函数addSpecialCharToJsonStringKeys(jsonString){
让结果=jsonString;
让findKeysRegex=/“[0-9]+”\s*:/g;
让editKeysRegex=/[0-9]+//g;
if(jsonString&(jsonString.match(findKeysRegex)| |[]).length>0){
结果=(jsonString).replace(findKeysRegex,函数(x){
返回x.replace(editKeysRegex,函数(y){
返回“(“+y+”)”;//这里我们编辑键
});
});
}
返回结果;
};
console.log(
addSpecialCharToJsonStringKeys(jsonTest)
)
函数转换(inputJson){
const parsed=JSON.parse(inputJson);
for(已解析的常量键){
const keyAsInt=parseInt(键,10);
if(编号isSafeInteger(keyAsInt)){
已解析[`(${key})`]=已解析的[key];
删除已解析的[key]
}
}
返回JSON.stringify(已解析);
}
a=变换(
{“S-5”:“18”、“5”:“19”、“5AA”:“20”、“456”:“5”、“单词”:“51”}
);
控制台日志(a)代码>你试过什么?包括你的代码。您遇到了什么问题?编辑关键点是什么意思?将它们编辑成什么?只需使用
JSON.parse
和JSON.stringify
示例将抛出一个语法错误。为什么您以前没有提到数字键?现在它更有意义了。你最好解析这个JSON并操纵结果对象。是的,我知道,但这是一个陷阱——我不能。这就是为什么我提交了这个答案。“我不能”-为什么?你说“没有额外的图书馆”JSON.parse
没有使用任何libraries@WojciechX:有道理,谢谢你的解释。您可以编写自己的JSON解析器(使用Map
s而不是对象)。这将是更多的代码,但也更健壮。您好david_adler,此解决方案不编辑键,只编辑值。明白了,谢谢@WojciechX