Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在不改变数字键顺序的情况下编辑JSON中的数字键?_Javascript_Json_Regex_String_Edit - Fatal编程技术网

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