请教java里的gson解析问题

sesame172 2014-01-14 04:07:17
[
{"Id":1,"Name":"Alin","Grade":[{"Chinese":A,"Math":"A","English":"D"}]}
{"Id":2,"Name":"BoB","Grade":[{"Chinese":B,"Math":"C","English":"A"}]}
{"Id":3,"Name":"Cindy","Grade":[{"Chinese":C,"Math":"A","English":"B"}]}
]

想解析得到如下结果,望各位大侠们指点,最好能有代码!谢谢大家了!
Name=Alin, Chinese=A
Name=BoB, Chinese=B
Name=Cindy, Chinese=C
...全文
278 6 打赏 收藏 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ekekyn 2014-01-15
  • 打赏
  • 举报
回复
引用 4 楼 zzq19860626 的回复:
如果就楼主的那个json 解析的话很多种方法都可以的,看下json.org的官网org.json ,json-lib等等很多工具,下载一个试试就好了。
+1 掌握了方法,很容易写出代码
长腮的北极熊 2014-01-15
  • 打赏
  • 举报
回复
引用 3 楼 u013425421 的回复:
首先定义两个Javebean,如下: Grade.java

package com.armslee.json.test.model;

import java.io.Serializable;

public class Grade implements Serializable{

	/**
	 * 
	 */
	private static final long serialVersionUID = -2118483800595534815L;
	
	private String chinese;
	private String math;
	private String english;

	public String getChinese() {
		return chinese;
	}

	public void setChinese(String chinese) {
		this.chinese = chinese;
	}

	public String getMath() {
		return math;
	}

	public void setMath(String math) {
		this.math = math;
	}

	public String getEnglish() {
		return english;
	}

	public void setEnglish(String english) {
		this.english = english;
	}
	
	@Override
	public String toString() {
		return "Chinese:"+this.chinese;
	}

}

Person.java:

package com.armslee.json.test.model;

import java.io.Serializable;

public class Person implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 3254237100070656010L;

	private String id;
	private String name;

	private Grade grade;

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Grade getGrade() {
		return grade;
	}

	public void setGrade(Grade grade) {
		this.grade = grade;
	}
	
	@Override
	public String toString() {
		// TODO Auto-generated method stub
		return "Name:"+this.name+" "+this.grade.toString();
	}

}

Test.java

package com.armslee.json.test.cases;

import java.util.ArrayList;
import java.util.List;

import net.sf.json.JSONArray;

import com.armslee.json.test.model.Grade;
import com.armslee.json.test.model.Person;

public class Test {

	public static void main(String[] args) {
		Person p = new Person();
		p.setId("1");
		p.setName("Lavender");
		Grade g = new Grade();
		g.setChinese("A");
		g.setMath("A");
		g.setEnglish("A");
		p.setGrade(g);

		List<Person> lp = new ArrayList<Person>();
		lp.add(p);
		lp.add(p);
		lp.add(p);
		String info = JSONArray.fromObject(lp).toString();

		JSONArray ja = JSONArray.fromObject(info);

		@SuppressWarnings({ "unchecked", "deprecation" })
		List<Person> newL = JSONArray.toList(ja, Person.class);

		for (Person person : newL) {
			System.out.println(person.toString());
		}

	}

}

输出结果如下:

Name:Lavender Chinese:A
Name:Lavender Chinese:A
Name:Lavender Chinese:A
++
张自强 2014-01-14
  • 打赏
  • 举报
回复
如果就楼主的那个json 解析的话很多种方法都可以的,看下json.org的官网org.json ,json-lib等等很多工具,下载一个试试就好了。
Lavener 2014-01-14
  • 打赏
  • 举报
回复
首先定义两个Javebean,如下: Grade.java

package com.armslee.json.test.model;

import java.io.Serializable;

public class Grade implements Serializable{

	/**
	 * 
	 */
	private static final long serialVersionUID = -2118483800595534815L;
	
	private String chinese;
	private String math;
	private String english;

	public String getChinese() {
		return chinese;
	}

	public void setChinese(String chinese) {
		this.chinese = chinese;
	}

	public String getMath() {
		return math;
	}

	public void setMath(String math) {
		this.math = math;
	}

	public String getEnglish() {
		return english;
	}

	public void setEnglish(String english) {
		this.english = english;
	}
	
	@Override
	public String toString() {
		return "Chinese:"+this.chinese;
	}

}

Person.java:

package com.armslee.json.test.model;

import java.io.Serializable;

public class Person implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 3254237100070656010L;

	private String id;
	private String name;

	private Grade grade;

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Grade getGrade() {
		return grade;
	}

	public void setGrade(Grade grade) {
		this.grade = grade;
	}
	
	@Override
	public String toString() {
		// TODO Auto-generated method stub
		return "Name:"+this.name+" "+this.grade.toString();
	}

}

Test.java

package com.armslee.json.test.cases;

import java.util.ArrayList;
import java.util.List;

import net.sf.json.JSONArray;

import com.armslee.json.test.model.Grade;
import com.armslee.json.test.model.Person;

public class Test {

	public static void main(String[] args) {
		Person p = new Person();
		p.setId("1");
		p.setName("Lavender");
		Grade g = new Grade();
		g.setChinese("A");
		g.setMath("A");
		g.setEnglish("A");
		p.setGrade(g);

		List<Person> lp = new ArrayList<Person>();
		lp.add(p);
		lp.add(p);
		lp.add(p);
		String info = JSONArray.fromObject(lp).toString();

		JSONArray ja = JSONArray.fromObject(info);

		@SuppressWarnings({ "unchecked", "deprecation" })
		List<Person> newL = JSONArray.toList(ja, Person.class);

		for (Person person : newL) {
			System.out.println(person.toString());
		}

	}

}

输出结果如下:

Name:Lavender Chinese:A
Name:Lavender Chinese:A
Name:Lavender Chinese:A
oh_Maxy 2014-01-14
  • 打赏
  • 举报
回复
gson是指谷歌的json处理工具么? 一般要先定义好一个类,然后使用第三方工具操作,比较方便。 目前恰好使用的是Google的,这边有个样例,可以参考下:

public class GoogleJsonTest {
    public static void main(String[] args) {
        Gson gson = new Gson();
        Object myValue = new MyValue("9527", 999.99);

        // 对象转为json // String jsonStr = convertObjectToString(myValue);
        String jsonStr = gson.toJson(myValue);
        System.out.println(jsonStr + myValue.getClass());

        // json字符串转为对象
        MyValue myValue2 = gson.fromJson(jsonStr, MyValue.class);// 这个应该是你想要的操作吧
        System.out.println(myValue2);
        System.out.println(myValue == myValue2);
        List<Object> myValueList = new ArrayList<Object>();
        myValueList.add(myValue);
        myValueList.add("111");
        myValueList.add(myValue2);

        String jsonStrValues = gson.toJson(myValueList);
        System.out.println("jsonStrValues===" + jsonStrValues);
        List<Object> myValueList2 = gson.fromJson(jsonStrValues, List.class);// 有告警
        for (Object obj : myValueList2) {
            System.out.println("obj is===" + obj+":"+obj.getClass());
        }

    }
}

// 这个是我自定义的一个简单的类,LZ需要自己定义一个类,有Name和Chinese属性
class MyValue {
    private String id;

    private double price;

    private Detail detail;

    public MyValue(String id, double price) {
        this.id = id;
        this.price = price;
        this.detail = new Detail("我的ID是:" + id + "。很高兴认识大家!");
    }

    @Override
    public String toString() {
        return "id:" + id + ";price:" + price + ";宣言:" + detail.getMyWords();
    }

    private class Detail {
        private String myWords;

        public Detail(String myWords) {
            this.myWords = myWords;
        }

        public String getMyWords() {
            return myWords;
        }
    }
}

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧