如何在搜索JSON对象时忽略大小写

68de4m5k  于 2023-03-20  发布在  其他
关注(0)|答案(4)|浏览(498)

我的示例JSON输入如下所示:

"JobName":"Test Job 1",
"events":[
    {   "features":[],
        "InputHiveTable":"uilog_uiclientlogdata",
        "eventColumn":"command",
        "name":"edu.apollogrp.classroom.discussion.client.events.CreateDiscussionEvent"
    },

考虑字段"InputHiveTable",它可以是全大写的INPUTHIVETABLE,全小写的inputhivetable,或者像现在这样两者混合。
目前,我阅读的字段如下所示(在Java中):

JSONObject jsonObject = (JSONObject) obj;
JSONArray events = (JSONArray) jsonObject.get("events");
String InputHiveTable = (String)event.get("InputHiveTable");

因此,我的问题是如何在忽略大小写的情况下搜索字段"InputHiveTable"

im9ewurl

im9ewurl1#

如果您必须多次执行这种不区分大小写的查找,我只需要编写一个方法来执行该查找:

public Object getIgnoreCase(JSONObject jobj, String key) {

    Iterator<String> iter = jobj.keySet().iterator();
    while (iter.hasNext()) {
        String key1 = iter.next();
        if (key1.equalsIgnoreCase(key)) {
            return jobj.get(key1);
        }
    }

    return null;

}
swvgeqrz

swvgeqrz2#

你可以将JSONObject读入一个java字符串,然后调用String.toLowerCase并将其存储回JSONObject.这会将字符串的大小写全部转换为小写,所以你必须在逻辑的其他地方考虑到这一点.之后,你只需要对“inputhivetable”执行get调用.
这绝不是一个很好的解决方案,但是如果您绝对没有其他方法来处理作为JSON输入返回的内容,这是一个潜在的解决方案。

5f0d552i

5f0d552i3#

考虑到可以使用TreeMap实现大小写不敏感(即通过String.CASE_INSENSITIVE_ORDER比较器),您可能可以执行以下操作:
1.实现您自己的MyJSONObject扩展TreeMap,其中它的方法将只调用JSONObject的静态方法,使用与JSONObject相同的签名和所有必需的接口。
1.实现ContainerFactory接口,其中createObjectContainer将返回MyJSONObject的新示例(并且createArrayContainer将仅返回新的JSONArray)。
1.要使用新容器MyContainerFactory运行它:

StringReader in = new StringReader(yourJSONString);                    
 JSONParser parser = new JSONParser();      
 parser.parse(in, yourContainerFactory)
flmtquvp

flmtquvp4#

示例Json:“数据”:{“信息”:{“身份证”:“64”。“关系”:“当前”,} }
在java模型中:

@JsonbProperty("Information")
private DataInformationModel information;
@JsonbProperty("Id")
private DataModel id;

@JsonbProperty为我工作

相关问题