你好:
後台拆分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());這句不報錯么?我咋覺得語法錯的