9

我有一些 JSON 数据,但所有的键都是大写的。如何解析它们并将键转换为更低?我正在使用 jQuery。

例如:

JSON数据:

{"ID":1234, "CONTENT":"HELLO"}

期望的输出:

{id:1234, content:"HELLO"}
4

5 回答 5

16

这个怎么样:

json.replace(/"([^"]+)":/g,function($0,$1){return ('"'+$1.toLowerCase()+'":');}));

正则表达式捕获键名 $1 并将其转换为小写。

现场演示:http: //jsfiddle.net/bHz7x/1/

[编辑] 为了解决@FabrícioMatté 的评论,另一个仅匹配单词字符的演示:http: //jsfiddle.net/bHz7x/4/

于 2013-02-04T23:14:04.513 回答
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;
});

小提琴

参考:

于 2013-02-04T23:07:06.487 回答
1

那就是功能:

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"}'))
于 2013-02-04T23:21:50.937 回答
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"}

于 2016-02-25T18:18:32.367 回答
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>

于 2020-10-11T11:35:16.960 回答