如果您想了解使用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文件转换成对象或者集合文件)
- android – 使用Gson将Json反序列化为单例
- android – 使用GSON将JSON转换为嵌套对象(通用对象)
- java – 如何使用GSON / JSON将字符串数组转换为对象?
- Java 如何使用Gson将JSON转换为HashMap?
使用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反序列化为单例
现在,当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
解决方法
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转换为嵌套对象(通用对象)
第一个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将字符串数组转换为对象?
[ [ "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?
我正在从返回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?的相关知识,请在本站进行查询。
本文标签: