2017-06-16 54 views
0
单独对象

我有以下的JSON字符串:如何提取JSON字符串GSON

String config = "{contact:{\"FIRSTNAME\":\"C_FirstName\",\"EMAIL\":\"C_EmailAddress\"}, " 
          + "customobject:{\"CUSTOM_FIELD1\":\"Custom_Field__11\"," 
          + "\"FIRSTNAME\":\"First_Name1\",\"EMAIL\":\"Email_Address1\"}}"; 

我需要提取每一个对象,即contactcustomobjectString所以最终的结果应该是:

String contact = "{\"FIRSTNAME\":\"C_FirstName\",\"EMAIL\":\"C_EmailAddress\"}"; 
String customobject = "{\"CUSTOM_FIELD1\":\"Custom_Field__11\"," 
         + "\"FIRSTNAME\":\"First_Name1\",\"EMAIL\":\"Email_Address1\"}"; 

这是需要使用Gson此所以我想以下几点:

Map<String, String> map = gson.fromJson(config, new TypeToken<Map<String,Object>>(){}.getType()); 

String json = map.get("contact").toString(); 

,但我得到了以下错误:

java.lang.ClassCastException: com.google.gson.internal.StringMap cannot be cast to java.lang.String

什么是实现这一目标的正确方法?

回答

0

发现我的解决方案:

import java.util.Map; 

import com.google.gson.Gson; 
import com.google.gson.JsonElement; 
import com.google.gson.reflect.TypeToken; 

public class JsonTest { 


    static String config = "{contact:{\"FIRSTNAME\":\"C_FirstName\",\"EMAIL\":\"C_EmailAddress\"}, " 
          + "customobject:{\"CUSTOM_FIELD1\":\"Custom_Field__11\"," 
          + "\"FIRSTNAME\":\"First_Name1\",\"EMAIL\":\"Email_Address1\"}}"; 

    String contact = "{\"FIRSTNAME\":\"C_FirstName\",\"EMAIL\":\"C_EmailAddress\"}"; 
    String customobject = "{\"CUSTOM_FIELD1\":\"Custom_Field__11\"," 
          + "\"FIRSTNAME\":\"First_Name1\",\"EMAIL\":\"Email_Address1\"}"; 

    public static void main(String[] args) { 

     Gson gson = new Gson(); 

     Conf c = gson.fromJson(config, Conf.class); 

     String contactStr = gson.toJson(c.getContact()); 

     System.out.println(contactStr); 

    } 

    class Conf{ 

     Map<String, String> contact; 
     Map<String, String> co; 
     public Map<String, String> getContact() { 
      return contact; 
     } 
     public void setContact(Map<String, String> contact) { 
      this.contact = contact; 
     } 
     public Map<String, String> getCo() { 
      return co; 
     } 
     public void setCo(Map<String, String> co) { 
      this.co = co; 
     } 


    } 
} 
0

尝试这个

  1. 创建类配置,联系方式和CustomObject给出下面

    class Config implements Serializable { 
    Contact contact; 
    CustomObject customobject; 
    
    public Config() { 
        this(new Contact("",""), new CustomObject("", "", "")); 
    } 
    
    public Config(Contact contact, CustomObject customobject) { 
        this.contact = contact; 
        this.customobject = customobject; 
    } 
    
    public Contact getContact() { 
        return contact; 
    } 
    
    public void setContact(Contact contact) { 
        this.contact = contact; 
    } 
    
    public CustomObject getCustomobject() { 
        return customobject; 
    } 
    
    public void setCustomobject(CustomObject customobject) { 
        this.customobject = customobject; 
    } 
    } 
    
    class Contact implements Serializable{ 
    
    String FIRSTNAME; 
    String EMAIL; 
    
    public Contact() { 
        this("",""); 
    } 
    
    public Contact(String FIRSTNAME, String EMAIL) { 
        this.FIRSTNAME = FIRSTNAME; 
        this.EMAIL = EMAIL; 
    } 
    
    public String getEMAIL() { 
        return EMAIL; 
    } 
    
    public void setEMAIL(String EMAIL) { 
        this.EMAIL = EMAIL; 
    } 
    
    public String getFIRSTNAME() { 
        return FIRSTNAME; 
    } 
    
    public void setFIRSTNAME(String FIRSTNAME) { 
        this.FIRSTNAME = FIRSTNAME; 
    } 
    } 
    
    class CustomObject implements Serializable { 
    
    String CUSTOM_FIELD1; 
    String FIRSTNAME; 
    String EMAIL; 
    
    public CustomObject() { 
        this("", "", ""); 
    } 
    
    public CustomObject(String CUSTOM_FIELD1, String FIRSTNAME, String EMAIL) { 
        this.CUSTOM_FIELD1 = CUSTOM_FIELD1; 
        this.FIRSTNAME = FIRSTNAME; 
        this.EMAIL = EMAIL; 
    } 
    
    public String getCUSTOM_FIELD1() { 
        return CUSTOM_FIELD1; 
    } 
    
    public void setCUSTOM_FIELD1(String CUSTOM_FIELD1) { 
        this.CUSTOM_FIELD1 = CUSTOM_FIELD1; 
    } 
    
    public String getFIRSTNAME() { 
        return FIRSTNAME; 
    } 
    
    public void setFIRSTNAME(String FIRSTNAME) { 
        this.FIRSTNAME = FIRSTNAME; 
    } 
    
    public String getEMAIL() { 
        return EMAIL; 
    } 
    
    public void setEMAIL(String EMAIL) { 
        this.EMAIL = EMAIL; 
    } 
    } 
    
  2. 现在分析它使用GSON作为低于

    String config = "{contact 
    {\"FIRSTNAME\":\"C_FirstName\",\"EMAIL\":\"C_EmailAddress\"}, " 
         + "customobject:{\"CUSTOM_FIELD1\":\"Custom_Field__11\"," 
         + 
    "\"FIRSTNAME\":\"First_Name1\",\"EMAIL\":\"Email_Address1\"}}"; 
    
    try { 
        Gson gson = new Gson(); 
    
        Config config1 = gson.fromJson(config, Config.class); 
    
        System.out.println(config1.getContact().FIRSTNAME); 
        System.out.println(config1.getContact().EMAIL); 
    
        System.out.println(config1.getCustomobject().CUSTOM_FIELD1); 
        System.out.println(config1.getCustomobject().FIRSTNAME); 
        System.out.println(config1.getCustomobject().EMAIL); 
    
    
    } catch (JsonSyntaxException e) { 
        e.printStackTrace(); 
    } 
    

NOTE : Please Follow Best Practices For Naming Conventions. You are using wrong one.

1

如果你简单地提取JSON属性值,你不需要你的反序列化和序列化的步骤。您所要做的就是使JSON树模型脱离JSON输入数据并寻址目标对象。在Gson有JsonElement s为这(和那)目的服务。

private static final JsonParser jsonParser = new JsonParser(); 

public static void main(final String... args) { 
    final String config = "{contact:{\"FIRSTNAME\":\"C_FirstName\",\"EMAIL\":\"C_EmailAddress\"}, " 
      + "customobject:{\"CUSTOM_FIELD1\":\"Custom_Field__11\"," 
      + "\"FIRSTNAME\":\"First_Name1\",\"EMAIL\":\"Email_Address1\"}}"; 
    final JsonObject rootObject = jsonParser.parse(config).getAsJsonObject(); 
    System.out.println(rootObject.get("contact")); 
    System.out.println(rootObject.get("customobject")); 
} 

输出:

{"FIRSTNAME":"C_FirstName","EMAIL":"C_EmailAddress"}
{"CUSTOM_FIELD1":"Custom_Field__11","FIRSTNAME":"First_Name1","EMAIL":"Email_Address1"}

每个JsonElement子类都有自己的toString()实施产生它的JSON字符串表示。有关详细信息,请参阅Gson JsonElementJsonParser JavaDocs。