GVKun编程网logo

使用GSON将json文件转换成对象或者集合(使用gson将json文件转换成对象或者集合文件)

12

如果您想了解使用GSON将json文件转换成对象或者集合的相关知识,那么本文是一篇不可错过的文章,我们将对使用gson将json文件转换成对象或者集合文件进行全面详尽的解释,并且为您提供关于andro

如果您想了解使用GSON将json文件转换成对象或者集合的相关知识,那么本文是一篇不可错过的文章,我们将对使用gson将json文件转换成对象或者集合文件进行全面详尽的解释,并且为您提供关于android – 使用Gson将Json反序列化为单例、android – 使用GSON将JSON转换为嵌套对象(通用对象)、java – 如何使用GSON / JSON将字符串数组转换为对象?、Java 如何使用Gson将JSON转换为HashMap?的有价值的信息。

本文目录一览:

使用GSON将json文件转换成对象或者集合(使用gson将json文件转换成对象或者集合文件)

使用GSON将json文件转换成对象或者集合(使用gson将json文件转换成对象或者集合文件)

第1种情况的json文件

{"name":"狩猎者",
"age":[''aa'',''bb'',''cc''],
"tel":"13957809999",
"address":"中国湖南衡阳"}

第2种情况的json文件

[{"name":"狩猎者",
"age":[''aa'',''bb'',''cc''],
"tel":"13957809999",
"address":"中国湖南衡阳"},
{"name":"飞鱼",
"age":[''aa'',''bb'',''cc''],
"tel":"13957808888",
"address":"中国浙江宁波"}]

对应的pojo类

public class Person {
    private String name;
    private String[] age;
    private String tel;
    private String address;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String[] getAge() {
        return age;
    }
    public void setAge(String[] age) {
        this.age = age;
    }
    public String getTel() {
        return tel;
    }
    public void setTel(String tel) {
        this.tel = tel;
    }
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }
    @Override
    public String toString() {
        return "Person [name=" + name + ", age=" + Arrays.toString(age)
                + ", tel=" + tel + ", address=" + address + "]";
    }
}
public class JsonFileToObject {
	
	 public static <T> T  transferObject(String filePath,T obj){
		  File file=new File(filePath);
		  StringBuffer sb = new StringBuffer() ;
		  JsonParser jsonParser=new JsonParser();
		  Gson gson = new Gson();
		  String line;
		  BufferedReader br=null;
		  try {
			br=new BufferedReader(new FileReader(file));
			  while((line=br.readLine())!=null){
				  sb.append(line);
			  }
		  } catch (FileNotFoundException e) {
			  e.printStackTrace();
		  } catch (IOException e) {
			  e.printStackTrace();
		  }
		  
		  String json=sb.toString();
		  JsonElement jsonElement=jsonParser.parse(json);  
		  json = jsonElement.toString();
		  @SuppressWarnings("unchecked")
		  T transferObj = (T) gson.fromJson(json, obj.getClass());
		  return transferObj;
	 }
	 
	 public  static <T> List<T> transferList(String filePath,T obj){
		 File file=new File(filePath);
		 StringBuffer sb = new StringBuffer() ;
		 JsonParser jsonParser=new JsonParser();
		 List<T> objs=new ArrayList<T>();
		 Gson gson = new Gson();
		 String line;
		 BufferedReader br=null;
		 try {
			 br=new BufferedReader(new FileReader(file));
			 while((line=br.readLine())!=null){
				 sb.append(line);
			 }
		 } catch (FileNotFoundException e) {
			 e.printStackTrace();
		 } catch (IOException e) {
			 e.printStackTrace();
		 }
		 String json=sb.toString();
		 JsonElement jsonElement=jsonParser.parse(json);  
		 JsonArray jsonArray=jsonElement.getAsJsonArray();  
		 Iterator<JsonElement> it=jsonArray.iterator();  
		  while(it.hasNext()){ 
		   jsonElement=it.next();
		   json=jsonElement.toString();  
		   @SuppressWarnings("unchecked")
		   T transferObj = (T) gson.fromJson(json, obj.getClass());
		   objs.add(transferObj);  
		  }
		  return objs; 
		  
	 }
}

 

android – 使用Gson将Json反序列化为单例

android – 使用Gson将Json反序列化为单例

我正在使用Gson将Json反序列化为模型ApplicationModel.我希望这个模型是一个单例,所以我可以在我的应用程序的其他地方访问它.

现在,当Gson创建这个类的实例时,我正以非常规的方式创建单例实例.见下文:

public class ApplicationModel {

    private static ApplicationModel instance;

    private GeneralVO general;

    protected ApplicationModel() {
        instance = this;
    }

    public static ApplicationModel getInstance() {
        return instance;
    }

    public String getVersionDate() {
        return general.getVersionDate();
    }
}

这是我创建它然后在应用程序中重用它的方式:

InputStreamReader reader = new InputStreamReader(is);
ApplicationModel model1 = new Gson().fromJson(reader,ApplicationModel.class);

Log.i("mytag","InputStream1 = "+model1.toString());
Log.i("mytag","Date: "+model1.getVersionDate());
ApplicationModel model2 = ApplicationModel.getInstance();
Log.i("mytag","InputStream1 = "+model2.toString());
Log.i("mytag","Date: "+model2.getVersionDate());

这有效,因为getInstance()返回相同的模型,但不知何故,这似乎不正确.

我的问题是“这是一个很好的办法,还是有更好的解决方案?”

编辑

做单例的更好方法是使用带有一个INSTANCE元素的枚举.

See this post for an explanation

解决方法

我建议在Model上实例化你的单例实例,而不是使用构造函数实例化它.

public class ApplicationModel {

    private static ApplicationModel instance; //= new ApplicationModel(); 
    //instantiating here is called an "Eagerly Instantiated"

    private GeneralVO general;

    private ApplicationModel() { 
    }

    public static ApplicationModel getInstance() {
        //instantiating here is called "Lazily Instantiated",using : 
        //if (instance==null) {                  --> Check whether ''instance'' is instantiated,or null
        //    instance = new ApplicationModel(); --> Instantiate if null
        //}
        return instance;  //return the single static instance
    }

    public String getVersionDate() {
        return general.getVersionDate();
    }
}

通过将构造函数设置为private,可以防止对象被另一个类重新实例化,要使用该对象,您必须使用ApplicationModel.getInstance()调用该对象.

因此,如果要设置值,请调用ApplicationModel.getInstance().setterMethod(value),为什么这有用?如果要跟踪更改,则只需跟踪setter方法.如果使用了构造函数,则还必须跟踪构造函数.

示例:

// To SET the value:
// instead of ApplicationModel model1 = new Gson().fromJson(reader,ApplicationModel.class);
ApplicationModel.getInstance.setValue(new Gson().fromJson(reader,ApplicationModel.class);

// To GET the value :
ApplicationModel.getInstance.getValue();

“渴望实例化”与“懒惰实例化”:

>如果您想要一种简单的方法来处理,那么Eager Instantiation非常有用
主题
> Lazy Instantiation具有更好的内存占用

除此之外,您可以谷歌搜索更多信息,但我认为这对您来说应该已经足够了.

希望这有帮助,祝你好运^^

问候,

里德

android – 使用GSON将JSON转换为嵌套对象(通用对象)

android – 使用GSON将JSON转换为嵌套对象(通用对象)

我想通过使用Gson为解析 @L_301_0@创建一个解析器.

第一个IParser.java

public interface IParser<T> {
    public T parse(String json);
}

第二个Parser.java

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.reflect.Typetoken;

public class Parser<T> implements IParser<T> {

    @Override
    public T parse(String json) {
        GsonBuilder builder = new GsonBuilder();
        Gson gson = builder.enableComplexMapKeySerialization().create();
        MyJson<T> jsonParsed = gson.fromJson(json,new Typetoken<MyJson<T>>() {
        }.getType());

        System.out.println(jsonParsed.toString());
        return null;
    }

}

第三个MyJson.java

public class MyJson<T> {
    private int status;
    private T data;

    public int getStatus() {
        return status;
    }

    public void setStatus(int status) {
        this.status = status;
    }

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }
}

和User.java

import java.io.Serializable;

public class User implements Serializable {
    private static final long serialVersionUID = 1L;
    private long usrId;
    private String usrNm;
    private String usrPwd;
    private String usrEml;

    public User() {

    }

    public long getUsrId() {
        return usrId;
    }

    public void setUsrId(long usrId) {
        this.usrId = usrId;
    }

    public String getUsrNm() {
        return usrNm;
    }

    public void setUsrNm(String usrNm) {
        this.usrNm = usrNm;
    }

    public String getUsrPwd() {
        return usrPwd;
    }

    public void setUsrPwd(String usrPwd) {
        this.usrPwd = usrPwd;
    }

    public String getUsrEml() {
        return usrEml;
    }

    public void setUsrEml(String usrEml) {
        this.usrEml = usrEml;
    }

    @Override
    public String toString() {
        return "User [usrId=" + usrId + ",usrNm=" + usrNm + ",usrPwd="
                + usrPwd + ",usrEml=" + usrEml + "]";
    }
}

我的JSON字符串:

{
    status: 200,data: {
        usrId: 2,usrNm: "John",usrPwd: "123",usrEml: "john@test.com"
    }
}

我想在jsonString之上解析为MyJson< T>宾语.

我做:

MyJson<T> jsonParsed = gson.fromJson(json,new Typetoken<MyJson<T>>() {
            }.getType());

=> Gson将MyJson中的用户解析为LinkedTreeMap

它的意思是:Object data = jsonParsed.getData(); => LinkedTreeMap的数据实例

我想要的:用户的数据实例

但是,当我尝试:

MyJson<User> jsonParsed = gson.fromJson(json,new Typetoken<MyJson<User>>() {
            }.getType());

gson工作得很好.

所以我想知道我怎么能用第一种方式使gson工作正常(使用T而不是User),因为我想通过使用Parser解析其他对象

谢谢你的帮助.

解决方法

@Override
public T parse(String json,Type type) {
    GsonBuilder builder = new GsonBuilder();
    Gson gson = builder.enableComplexMapKeySerialization().create();
    MyJson<T> jsonParsed = gson.fromJson(json,type);

    System.out.println(jsonParsed.toString());
    return null;
}

使用:

User user = myJson.parse(jsonString,new Typetoken<User>() {
        }.getType());

java – 如何使用GSON / JSON将字符串数组转换为对象?

java – 如何使用GSON / JSON将字符串数组转换为对象?

我有一个像这样的json:
[
  [
    "Passport Number","NATIONALITY","REASONS"
  ],[
    "SHAIS100","INDIA",""
  ],[
    "","","Agent ID is not matched."
  ],""
  ]
]

我想将其填充到ArrayList< String []>,请告诉我该怎么办?

空字符串不应转换为空.

解决方法

这很简单,您只需要执行以下操作:

1.-首先创建Gson对象:

Gson gson = new Gson();

2.-然后获取您的列表的通讯录类型< String []> (请注意,由于Java的type erasure,您无法像List< String []> .class这样做):

Type type = new Typetoken<List<String[]>>() {}.getType();

3.-最后将JSON解析为类型类型的结构:

List<String[]> yourList = gson.fromJson(yourjsonString,type);

Java 如何使用Gson将JSON转换为HashMap?

Java 如何使用Gson将JSON转换为HashMap?

我正在从返回JSON格式数据的服务器请求数据。发出请求时,将HashMap转换为JSON并不困难,但另一种方式似乎有些棘手。JSON响应如下所示:

{     "header" : {         "alerts" : [             {                "AlertID" : "2",                "TSExpires" : null,                "Target" : "1",                "Text" : "woot",                "Type" : "1"            },            {                 "AlertID" : "3",                "TSExpires" : null,                "Target" : "1",                "Text" : "woot",                "Type" : "1"            }        ],        "session" : "0bc8d0835f93ac3ebbf11560b2c5be9a"    },    "result" : "4be26bc400d3c"}

哪种方法最容易访问此数据?我正在使用GSON模块。

答案1

小编典典
import java.lang.reflect.Type;import com.google.gson.reflect.TypeToken;Type type = new TypeToken<Map<String, String>>(){}.getType();Map<String, String> myMap = gson.fromJson("{''k1'':''apple'',''k2'':''orange''}", type);

今天的关于使用GSON将json文件转换成对象或者集合使用gson将json文件转换成对象或者集合文件的分享已经结束,谢谢您的关注,如果想了解更多关于android – 使用Gson将Json反序列化为单例、android – 使用GSON将JSON转换为嵌套对象(通用对象)、java – 如何使用GSON / JSON将字符串数组转换为对象?、Java 如何使用Gson将JSON转换为HashMap?的相关知识,请在本站进行查询。

本文标签: