你好:
后台拆分json
privateStringinteractPrizeAll;//json使用字符串来接收
方法中的代码:
Gsongson=newGson();
InteractPrizeinteractPrize=newInteractPrize();
//gson用泛型转List数组多个对象
List<InteractPrize>interactPrizeList=gson.fromJson(interactPrizeAll,newTypeToken<List<InteractPrize>>(){}.getType());//TypeToken,它是gson提供的数据类型转换器,可以支持各种数据集合类型转换
for(inti=0;i<interactPrizeList.size();i++)
{
interactPrize=interactPrizeList.get(i);//获取每一个对象
}
这一种方法是转单个对象时使用的
//gson转对象单个对象
//interactPrize=gson.fromJso(interactPrizeAll,InteractPrize.class);
这个方法是我后台拼的json往前台传的方法
jsonStrAll.append("{"+"""+"catid"+"""+":"+"""+c.getCatid()+"""+","+"""+"catname"+"""+":"+"""+c.getCatname()+"""+","+"""+"catdesc"+"""+":"+"""+c.getCatdesc()+"""+","+"""+"showinnav"+"""+":"+"""+c.getShowinnav()+"""+","+"""+"sortorder"+"""+":"+"""+c.getSortorder()+"""+","+"level:"+"""+"0"+"""+",parent:"+"""+"0"+"""+",isLeaf:true,expanded:false,"+"loaded:true},");
你自己挑着用吧!
㈡ gson实体转json时当字段值为空时,json串中就不存在该属于,请问如何在值为空的时候也保留该字符串
用这种方式就可以了:
Gson g = new GsonBuilder().serializeNulls().create();
㈢ android 解析json用那个包里面的方法比较好呢
android 解析json还有用Google出品的Gson比较好,具体步骤为:
1、首先,从 code.google.com/p/google-gson/downloads/list下载GsonAPI:
google-gson-1.7.1-release.zip 把gson-1.7.jar 到libs(项目根目录新建一个libs文件夹)中。 可以使用以下两种方法解析JSON数据,通过获取JsonReader对象解析JSON数据。
代码如下:
String jsonData = "[{\"username\":\"arthinking\",\"userId\":001},{\"username\":\"Jason\",\"userId\":002}]";
try{
JsonReader reader = new JsonReader(new StringReader(jsonData));
reader.beginArray();
while(reader.hasNext()){
reader.beginObject();
while(reader.hasNext()){
String tagName = reader.nextName();
if(tagName.equals("username")){
System.out.println(reader.nextString());
}
else if(tagName.equals("userId")){
System.out.println(reader.nextString());
}
}
reader.endObject();
}
reader.endArray();
}
catch(Exception e){
e.printStackTrace();
}
2、使用Gson对象获取User对象数据进行相应的操作:
代码如下:
Type listType = new TypeToken<LinkedList<User>>(){}.getType();
Gson gson = new Gson();
LinkedList<User> users = gson.fromJson(jsonData, listType);
for (Iterator iterator = users.iterator(); iterator.hasNext();) {
User user = (User) iterator.next();
System.out.println(user.getUsername());
System.out.println(user.getUserId());
}
3、如果要处理的JSON字符串只包含一个JSON对象,则可以直接使用fromJson获取一个User对象:
代码如下:
String jsonData = "{\"username\":\"arthinking\",\"userId\":001}";
Gson gson = new Gson();
User user = gson.fromJson(jsonData, User.class);
System.out.println(user.getUsername());
System.out.println(user.getUserId());
㈣ JAVA,当某个json数据中一个字段与另一个json数据中的字段值相同时,对两个json进行合并且相加,
要判断json数据的字段与其他数据是否相同,那么肯定是要先解析json数据。解析json数据的方式很多,Gson、FastJson都是很简便实用的工具。这里以Gson为例。
importjava.lang.reflect.Type;
importjava.util.*;
importcom.google.gson.Gson;
importcom.google.gson.reflect.TypeToken;
publicclassDivination{
publicstaticvoidmain(String[]args){
StringjsonStr="[{"depid":"5","score":"10"},{"depid":"4","score":"40"},{"depid":"4","score":"30"},{"depid":"5","score":"30"}]";
System.out.println("原始的json字符串:"+jsonStr);
//解析
Gsongson=newGson();
Typetype=newTypeToken<ArrayList<JsonData>>(){
}.getType();
ArrayList<JsonData>list=gson.fromJson(jsonStr,type);
//合并
List<JsonData>ordered=newArrayList<>();
Map<Integer,JsonData>map=newHashMap<>();
for(JsonDatajsonData:list){
JsonDatadata=map.get(jsonData.getDepid());
if(data!=null){//depid相同的合并score字段
data.setScore(data.getScore()+jsonData.getScore());
}else{
map.put(jsonData.getDepid(),jsonData);
ordered.add(jsonData);
}
}
//还原为json字符串
System.out.println("合并后json字符串:"+gson.toJson(map.values()));
System.out.println("合并后json字符串(按原来的顺序):"+gson.toJson(ordered));
}
}
classJsonData{
privateintdepid;
privateintscore;
publicintgetDepid(){
returndepid;
}
publicvoidsetDepid(intdepid){
this.depid=depid;
}
publicintgetScore(){
returnscore;
}
publicvoidsetScore(intscore){
this.score=score;
}
}
以上代码中List<JsonData> ordered = new ArrayList<>();是为了按原json数组的顺序输出合并后的结果,如果对顺序无要求可以删除相关代码。
运行结果:
㈤ 如何用gson将对象转换为json
使用Google的Gson实现对象和json字符串之间的转换
需要gson-1.4.jar
1.JsonUtil.java
Java代码
package com.snail.json;
import java.lang.reflect.Type;
import com.google.gson.Gson;
/**
* Java对象和JSON字符串相互转化工具类
* @author penghuaiyi
* @date 2013-08-10
*/
public final class JsonUtil {
private JsonUtil(){}
/**
* 对象转换成json字符串
* @param obj
* @return
*/
public static String toJson(Object obj) {
Gson gson = new Gson();
return gson.toJson(obj);
}
/**
* json字符串转成对象
* @param str
* @param type
* @return
*/
public static <T> T fromJson(String str, Type type) {
Gson gson = new Gson();
return gson.fromJson(str, type);
}
/**
* json字符串转成对象
* @param str
* @param type
* @return
*/
public static <T> T fromJson(String str, Class<T> type) {
Gson gson = new Gson();
return gson.fromJson(str, type);
}
}
2. Person.java
Java代码
package com.snail.json;
public class Person {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
3. Test.java
Java代码
package com.snail.json;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import com.google.gson.reflect.TypeToken;
public class Test {
/**
* 一般对象的转换
*/
public static void objectToJson(){
Person person = new Person();
person.setId(1);
person.setName("one");
//javabean转换成json字符串
String jsonStr = JsonUtil.toJson(person);
System.out.println(jsonStr);
//json字符串转换成javabean
Person newPerson = JsonUtil.fromJson(jsonStr, Person.class);
System.out.println(person == newPerson);
System.out.println(newPerson.getId()+","+newPerson.getName());
}
/**
* 复合结构数据转换(List)
*/
public static void listToJson(){
Person person1 = new Person();
person1.setId(1);
person1.setName("one");
Person person2 = new Person();
person2.setId(2);
person2.setName("two");
List<Person> list = new ArrayList<Person>();
list.add(person1);
list.add(person2);
//javabean转换成json字符串
String jsonStr = JsonUtil.toJson(list);
System.out.println(jsonStr);
//json字符串转换成javabean对象
List<Person> rtn = JsonUtil.fromJson(jsonStr, new TypeToken<List<Person>>(){}.getType());
for(Person person : rtn){
System.out.println(person.getId()+","+person.getName());
}
}
/**
* 复合结构数据转换(Map)
*/
public static void mapToJson(){
Person person1 = new Person();
person1.setId(1);
person1.setName("one");
Person person2 = new Person();
person2.setId(2);
person2.setName("two");
Map<Integer,Person> map = new HashMap<Integer,Person>();
map.put(person1.getId(), person1);
map.put(person2.getId(), person2);
//javabean转换成json字符串
String jsonStr = JsonUtil.toJson(map);
System.out.println(jsonStr);
//json字符串转换成Map对象
Map<Integer,Person> rtn = JsonUtil.fromJson(jsonStr, new TypeToken<Map<Integer,Person>>(){}.getType());
for(Entry<Integer, Person> entry : rtn.entrySet()){
Integer key = entry.getKey();
Person newPerson = entry.getValue();
System.out.println("key:"+key+","+newPerson.getId()+","+newPerson.getName());
}
}
public static void main(String[] args) {
objectToJson();
System.out.println("****************************");
listToJson();
System.out.println("****************************");
mapToJson();
}
}
㈥ retrofi里面解析json是用什么技术
SON技术的调研报告
一 、各个JSON技术的简介和优劣
1.json-lib
json-lib最开始的也是应用最广泛的json解析工具,json-lib 不好的地方确实是依赖于很多第三方包,
包括commons-beanutils.jar,commons-collections-3.2.jar,commons-lang-2.6.jar,commons-logging-1.1.1.jar,ezmorph-1.0.6.jar,
对于复杂类型的转换,json-lib对于json转换成bean还有缺陷,比如一个类里面会出现另一个类的list或者map集合,json-lib从json到bean的转换就会出现问题。
json-lib在功能和性能上面都不能满足现在互联网化的需求。
2.开源的Jackson
相比json-lib框架,Jackson所依赖的jar包较少,简单易用并且性能也要相对高些。
而且Jackson社区相对比较活跃,更新速度也比较快。
Jackson对于复杂类型的json转换bean会出现问题,一些集合Map,List的转换出现问题。
Jackson对于复杂类型的bean转换Json,转换的json格式不是标准的Json格式
3.Google的Gson
Gson是目前功能最全的Json解析神器,Gson当初是为因应Google公司内部需求而由Google自行研发而来,
但自从在2008年五月公开发布第一版后已被许多公司或用户应用。
Gson的应用主要为toJson与fromJson两个转换函数,无依赖,不需要例外额外的jar,能够直接跑在JDK上。
而在使用这种对象转换之前需先创建好对象的类型以及其成员才能成功的将JSON字符串成功转换成相对应的对象。
类里面只要有get和set方法,Gson完全可以将复杂类型的json到bean或bean到json的转换,是JSON解析的神器。
Gson在功能上面无可挑剔,但是性能上面比FastJson有所差距。
4.阿里巴巴的FastJson
Fastjson是一个Java语言编写的高性能的JSON处理器,由阿里巴巴公司开发。
无依赖,不需要例外额外的jar,能够直接跑在JDK上。
FastJson在复杂类型的Bean转换Json上会出现一些问题,可能会出现引用的类型,导致Json转换出错,需要制定引用。
FastJson采用独创的算法,将parse的速度提升到极致,超过所有json库。
综上4种Json技术的比较,在项目选型的时候可以使用Google的Gson和阿里巴巴的FastJson两种并行使用,
如果只是功能要求,没有性能要求,可以使用google的Gson,
如果有性能上面的要求可以使用Gson将bean转换json确保数据的正确,使用FastJson将Json转换Bean
二、Google的Gson包的使用简介。
Gson类:解析json的最基础的工具类
JsonParser类:解析器来解析JSON到JsonElements的解析树
JsonElement类:一个类代表的JSON元素
JsonObject类:JSON对象类型
JsonArray类:JsonObject数组
TypeToken类:用于创建type,比如泛型List<?>
(1)maven依赖
com.google.code.gson
㈦ 请大神帮助,java如何解析json数据
java首先导入以下一个包
json-lib-2.3-jdk15.jar
commons-beanutils-1.7.0.jar
commons-httpclient-3.1.jar
commons-lang-2.3.jar
commons-logging-1.0.4.jar
commons-collections-3.1.jar
ezmorph-1.0.3
String dataStr = "{\"resultcode\":\"200\",.......}";
JSONObject json = JSONObject.fromObject(dataStr );
String resultcode = json.get('resultcode');
就是这样获取的;
String result = json.get('resultcode');
JSONObject resultJson = JSONObject.fromObject(result );
嵌套的json必须在重新解析
去了解下 JSON的相关api吧
㈧ 关于java泛型的疑问 大神们帮帮忙啊
有2个方法重载:gson.fromJson(str, Person.class);
gson.fromJson(str, new TypeToken<List<Person>>(){}.getType());
第一个返回转换之后的实体,后者返回列表类型。
gson.<MyClass<T>> fromJson(result,(Type)new TypeToken<MyClass<T>>(){}.getType());这句不报错么?我咋觉得语法错的