Java 如何使用ggson解析JSON字符串以获取字段值

Java 如何使用ggson解析JSON字符串以获取字段值,java,json,parsing,Java,Json,Parsing,我有一个JSON示例,如下所示。我需要获取单个字段,如asidentiger和externalidentiger。我已将此JSON数据存储在字符串中。 使用GoogleJson作为模块(ggson) JSON数据: { "DeviceCommon": { "ASIdentifier": "123", "DatadeliveyMechanism": "notify", "MobileOriginatorCal

我有一个JSON示例,如下所示。我需要获取单个字段,如
asidentiger
externalidentiger
。我已将此JSON数据存储在字符串中。 使用GoogleJson作为模块(ggson)

JSON数据:

 {
        "DeviceCommon": {
            "ASIdentifier": "123",
            "DatadeliveyMechanism": "notify",
            "MobileOriginatorCallbackReference": {
                "url": "http://application.example.com/inbound/notifications/modatanotification/"
            },
            "AccessiblityCallbackReference": {
                "url": "http://application.example.com/inbound/notifications/accessibilitystatusnotification"
            }
        },
        "DeviceList": [{
            "ExternalIdentifer": "123456@mydomain.com",
            "msisdn": "123456",
            "senderName": "Device1",
            "MobileOriginatorCallbackReference": {
                "notifyURL": "http://application.example.com/inbound/notifications/modatanotification/"
            },
            "ConfigurationResultCallbackReference": {
                "notifyURL": "http://application.example.com/inbound/notifications/configurationResult"
            },
            "ASreferenceID": "AS000001",
            "NIDDduration": "1d"
        }]
    }
Data{
  deviceCommon=DeviceCommon{
    asIdentifier='123'
    datadeliveyMechanism='notify'
    mobileOriginatorCallbackReference=http://application.example.com/inbound/notifications/modatanotification/
    accessiblityCallbackReference=http://application.example.com/inbound/notifications/accessibilitystatusnotification
  }
  deviceList=[DeviceListEntry{
    externalIdentifer='123456@mydomain.com'
    msisdn='123456'
    senderName='Device1'
    mobileOriginatorCallbackReference=http://application.example.com/inbound/notifications/modatanotification/
    configurationResultCallbackReference=http://application.example.com/inbound/notifications/configurationResult
    asReferenceID='AS000001'
    nidDduration='1d'
  }]
}

String jsonInString = gson.toJson(data);
System.out.println("String is"+ jsonInString);
String is{"DeviceCommon":{"ASIdentifier":"123","DatadeliveyMechanism":"notify","MobileOriginatorCallbackReference":{"url":"http://application.example.com/inbound/notifications/modatanotification/"},"AccessiblityCallbackReference":{"url":"http://application.example.com/inbound/notifications/accessibilitystatusnotification"}},"DeviceList":[{"ExternalIdentifer":"123456@mydomain.com","msisdn":"123456","senderName":"Device1","MobileOriginatorCallbackReference":{"notifyURL":"http://application.example.com/inbound/notifications/modatanotification/"},"ConfigurationResultCallbackReference":{"notifyURL":"http://application.example.com/inbound/notifications/configurationResult"},"ASreferenceID":"AS000001","NIDDduration":"1d"}]}
我创建了POJO类,并使用下面的代码解析数据

data = new Gson().fromJson(new FileReader("/home/raj/apache-tomcat-8.0.3/webapps/file.json"), Data.class);  
System.out.println(data);
输出:

 {
        "DeviceCommon": {
            "ASIdentifier": "123",
            "DatadeliveyMechanism": "notify",
            "MobileOriginatorCallbackReference": {
                "url": "http://application.example.com/inbound/notifications/modatanotification/"
            },
            "AccessiblityCallbackReference": {
                "url": "http://application.example.com/inbound/notifications/accessibilitystatusnotification"
            }
        },
        "DeviceList": [{
            "ExternalIdentifer": "123456@mydomain.com",
            "msisdn": "123456",
            "senderName": "Device1",
            "MobileOriginatorCallbackReference": {
                "notifyURL": "http://application.example.com/inbound/notifications/modatanotification/"
            },
            "ConfigurationResultCallbackReference": {
                "notifyURL": "http://application.example.com/inbound/notifications/configurationResult"
            },
            "ASreferenceID": "AS000001",
            "NIDDduration": "1d"
        }]
    }
Data{
  deviceCommon=DeviceCommon{
    asIdentifier='123'
    datadeliveyMechanism='notify'
    mobileOriginatorCallbackReference=http://application.example.com/inbound/notifications/modatanotification/
    accessiblityCallbackReference=http://application.example.com/inbound/notifications/accessibilitystatusnotification
  }
  deviceList=[DeviceListEntry{
    externalIdentifer='123456@mydomain.com'
    msisdn='123456'
    senderName='Device1'
    mobileOriginatorCallbackReference=http://application.example.com/inbound/notifications/modatanotification/
    configurationResultCallbackReference=http://application.example.com/inbound/notifications/configurationResult
    asReferenceID='AS000001'
    nidDduration='1d'
  }]
}

String jsonInString = gson.toJson(data);
System.out.println("String is"+ jsonInString);
String is{"DeviceCommon":{"ASIdentifier":"123","DatadeliveyMechanism":"notify","MobileOriginatorCallbackReference":{"url":"http://application.example.com/inbound/notifications/modatanotification/"},"AccessiblityCallbackReference":{"url":"http://application.example.com/inbound/notifications/accessibilitystatusnotification"}},"DeviceList":[{"ExternalIdentifer":"123456@mydomain.com","msisdn":"123456","senderName":"Device1","MobileOriginatorCallbackReference":{"notifyURL":"http://application.example.com/inbound/notifications/modatanotification/"},"ConfigurationResultCallbackReference":{"notifyURL":"http://application.example.com/inbound/notifications/configurationResult"},"ASreferenceID":"AS000001","NIDDduration":"1d"}]}
输出:

 {
        "DeviceCommon": {
            "ASIdentifier": "123",
            "DatadeliveyMechanism": "notify",
            "MobileOriginatorCallbackReference": {
                "url": "http://application.example.com/inbound/notifications/modatanotification/"
            },
            "AccessiblityCallbackReference": {
                "url": "http://application.example.com/inbound/notifications/accessibilitystatusnotification"
            }
        },
        "DeviceList": [{
            "ExternalIdentifer": "123456@mydomain.com",
            "msisdn": "123456",
            "senderName": "Device1",
            "MobileOriginatorCallbackReference": {
                "notifyURL": "http://application.example.com/inbound/notifications/modatanotification/"
            },
            "ConfigurationResultCallbackReference": {
                "notifyURL": "http://application.example.com/inbound/notifications/configurationResult"
            },
            "ASreferenceID": "AS000001",
            "NIDDduration": "1d"
        }]
    }
Data{
  deviceCommon=DeviceCommon{
    asIdentifier='123'
    datadeliveyMechanism='notify'
    mobileOriginatorCallbackReference=http://application.example.com/inbound/notifications/modatanotification/
    accessiblityCallbackReference=http://application.example.com/inbound/notifications/accessibilitystatusnotification
  }
  deviceList=[DeviceListEntry{
    externalIdentifer='123456@mydomain.com'
    msisdn='123456'
    senderName='Device1'
    mobileOriginatorCallbackReference=http://application.example.com/inbound/notifications/modatanotification/
    configurationResultCallbackReference=http://application.example.com/inbound/notifications/configurationResult
    asReferenceID='AS000001'
    nidDduration='1d'
  }]
}

String jsonInString = gson.toJson(data);
System.out.println("String is"+ jsonInString);
String is{"DeviceCommon":{"ASIdentifier":"123","DatadeliveyMechanism":"notify","MobileOriginatorCallbackReference":{"url":"http://application.example.com/inbound/notifications/modatanotification/"},"AccessiblityCallbackReference":{"url":"http://application.example.com/inbound/notifications/accessibilitystatusnotification"}},"DeviceList":[{"ExternalIdentifer":"123456@mydomain.com","msisdn":"123456","senderName":"Device1","MobileOriginatorCallbackReference":{"notifyURL":"http://application.example.com/inbound/notifications/modatanotification/"},"ConfigurationResultCallbackReference":{"notifyURL":"http://application.example.com/inbound/notifications/configurationResult"},"ASreferenceID":"AS000001","NIDDduration":"1d"}]}
我需要解析这个JSON字符串以获得单个字段,如
ExternalIdentifier
asiIdentifier

我试过这样的东西,但不起作用

JsonObject jobj = new Gson().fromJson(jsonInString, JsonObject.class);
String result = jobj.get("ASIdentifier").toString();
System.out.println("value is"+ result);
注意:
ExternalIdentifier
在数组中,因此我需要在数组中循环找到它

你能告诉我我做错了什么吗?

可能的解决方案:

String result = jobj.get("DeviceCommon").getAsJsonObject().get("ASIdentifier").getAsString();
System.out.println("ASIdentifier: "+ result);

JsonArray jsonArray = jobj.get("DeviceList").getAsJsonArray();
for (JsonElement device : jsonArray ) {
    result = device.getAsJsonObject().get("ExternalIdentifer").getAsString();
    System.out.println("ExternalIdentifer: "+ result);
}
输出:

身份识别人:123

外部标识符:123456@mydomain.com

公共静态void printJson(JsonElement JsonElement,字符串键){
public static void printJson(JsonElement jsonElement,String key) {

            // Check whether jsonElement is JsonObject or not
            if (jsonElement.isJsonObject()) {
                Set<Entry<String, JsonElement>> ens = ((JsonObject) jsonElement).entrySet();
                if (ens != null) {
                    // Iterate JSON Elements with Key values
                    for (Entry<String, JsonElement> en : ens) {
                      //  System.out.println("##key is"+en.getKey() + " : ");
                        printJson(en.getValue(), en.getKey());
                       // System.out.println(en.getValue().getAsString());
                       // System.out.println(jsonElement.getAsString());
                    }
                }
            } 
         // Check whether jsonElement is Primitive or not
            else if (jsonElement.isJsonPrimitive()) {
                // print value as String
                System.out.println("###key is"+key);
                System.out.println("### value is"+jsonElement.getAsString());
            }  

            else if (jsonElement.isJsonArray()) {
                JsonArray jarr = jsonElement.getAsJsonArray();
                // Iterate JSON Array to JSON Elements
                System.out.println("\n###Array size is"+ jarr.size());
                for (JsonElement je : jarr) {
                    printJson(je,key);
                }
    }


     }
//检查jsonElement是否为JsonObject if(jsonElement.isJsonObject()){ Set ens=((JsonObject)jsonElement.entrySet(); 如果(ens!=null){ //使用键值迭代JSON元素 对于(条目en:ens){ //System.out.println(“##键为“+en.getKey()+”:”); printJson(en.getValue(),en.getKey()); //System.out.println(en.getValue().getAsString()); //System.out.println(jsonElement.getAsString()); } } } //检查jsonElement是否为基本元素 else if(jsonElement.isJsonPrimitive()){ //将值打印为字符串 System.out.println(“###键为”+键); System.out.println(“####值为”+jsonement.getAsString()); } else if(jsonElement.isJsonArray()){ JsonArray jarr=jsonElement.getAsJsonArray(); //将JSON数组迭代到JSON元素 System.out.println(“\n###数组大小为”+jarr.size()); 对于(JsonElement je:jarr){ printJson(je,key); } } }
谢谢。我也能得到下面的值