我有一些JSON数据,但所有键都是UPPER大小写。如何解析它们并将键转换为更低?我正在使用jQuery。
例如:
JSON数据:
{"ID":1234, "CONTENT":"HELLO"}
期望的输出:
{id:1234, content:"HELLO"}
答案 0 :(得分:9)
这个怎么样:
json.replace(/"([^"]+)":/g,function($0,$1){return ('"'+$1.toLowerCase()+'":');}));
正则表达式捕获键名$ 1并将其转换为小写。
现场演示:http://jsfiddle.net/bHz7x/1/
[编辑]要解决@FabrícioMatté的评论,另一个只匹配单词字符的演示:http://jsfiddle.net/bHz7x/4/
答案 1 :(得分:5)
迭代属性并创建小写属性,同时删除旧的大写属性:
var str = '{"ID":1234, "CONTENT":"HELLO"}';
var obj = $.parseJSON(str);
$.each(obj, function(i, v) {
obj[i.toLowerCase()] = v;
delete obj[i];
});
console.log(obj);
//{id: 1234, content: "HELLO"}
或者你可以从旧的属性中构建一个新对象:
var obj = $.parseJSON(str),
lowerCased = {};
$.each(obj, function(i, v) {
lowerCased[i.toLowerCase()] = v;
});
答案 2 :(得分:0)
这就是功能:
function JSON_Lower_keys(J) {
var ret={};
$.map(JSON.parse(J),function(value,key){
ret[key.toLowerCase()]=value;
})
return ret;
}
即电话:
console.log(JSON_Lower_keys('{"ID":1234, "CONTENT":"HELLO"}'))
答案 3 :(得分:0)
您可以坚持使用js并使用Objeck.keys()
var oldObj = { "ID":123, "CONTENT":"HI" }
var keysUpper = Object.keys(oldObj)
var newObj = {}
for(var i in keysUpper){
newObj[keysUpper[i].toLowerCase()] = oldObj[keysUpper[i]]
}
console.log(JSON.stringify(newObj))
复制并粘贴到浏览器控制台(F12)>>输出:{“id”:123,“content”:“HI”}
答案 4 :(得分:0)
我不善于解释一个想法,但是以下链接https://github.com/dchester/jsonpath/的库“ jsonpath”允许操纵和过滤使用正则表达式或JSONPath地址转换为json的所有json数据或数组。>
示例1: 使用以下值的地址显示json变量中包含的类别:
jsonpath.query(json, '$["Bienestar"][2]');
这与我使用json [“ Bienestar”] [2]相同; 没有图书馆。
示例2: 使用jsonpath正则表达式显示所有类别:
jsonpath.nodes(json, '$..[?(@)]');
示例3: 将每个类别中的所有现有值转换为json变量的大写字母:
jsonpath.apply(json, '$..curso', function(value){return value.toUpperCase()});
对于小写形式的任何文本,请将“ toUpperCase()”更改为“ toLowerCase()”
示例4: 以上说明的示例,但使用了jQuery ajax
/* library: https://github.com/dchester/jsonpath */
(function($){
var json;
var arg='balnero';
var url='https://cedfer2.github.io/ex/c.json';
$.ajax({
type: 'GET',
url: url,
dataType: 'text',
error: function() {
console.log('{error!}');
},
beforeSend: function() {
console.log('{cargando...(show spinner)}');
},
complete: function() {
console.log('{peticionCompleta...(hide spinner)}');
},
success: function (data, textStatus, jqXHR) {
console.log('success:');
json=$.parseJSON(data);
console.log('-------[success data: string find in json with valor in varable arg]-------');
console.log('arg valor:' + arg);
console.log(
jsonpath.query(json, '$..[?(@.curso.toUpperCase().indexOf("'+arg.toUpperCase()+'")>=0)]')
);
console.log('-------[success data: convert string find in json uppercase with valor in varable arg]-------');
console.log(jsonpath.apply(json, '$..[?(@.toUpperCase().indexOf("'+arg.toUpperCase()+'")>=0)]', function(value) { return value.toUpperCase() }));
console.log('--[show new structure json in the category "Bienestar" item 2: without library js]--');
console.log(json["Bienestar"][2]);
}
});
})(jQuery);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cedfer2.github.io/ex/jsonpath.min.js"></script>