JSON GSON 例子 待整理


 res/raw 下的  message.json 文件

<strong><span style="font-size:18px;">[
  {
    "id": 912345678901,
    "text": "How do I read JSON on Android?",
    "geo": null,
    "user": {
      "name": "android_newb",
      "followers_count": 41
    }
  },
  {
    "id": 912345678902,
    "text": "@android_newb just use android.util.JsonReader!",
    "geo": [50.454722, -104.606667],
    "user": {
      "name": "jesse",
      "followers_count": 2
    }
  }
]</span></strong>

message 类

<span style="font-size:14px;">public class Message {
    private long id;
    private String text;
    private ArrayList<Double> geo;
    private User2 user2;

    public long getId() {
        return id;
    }

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

    public String getText() {
        return text;
    }

    public void setText(String text) {
        this.text = text;
    }

    public ArrayList<Double> getGeo() {
        return geo;
    }

    public void setGeo(ArrayList<Double> geo) {
        this.geo = geo;
    }

    public User2 getUser2() {
        return user2;
    }

    public void setUser2(User2 user2) {
        this.user2 = user2;
    }

    @Override
    public String toString() {
        return "Message{" +
                "id=" + id +
                ", text='" + text + '\'' +
                ", geo=" + geo +
                ", user2=" + user2 +
                '}';
    }
}</span>


User2 类

<span style="font-size:14px;">public class User2 {
    private String name;
    private int followers_count;

    public String getName() {
        return name;
    }

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

    public int getFollowers_count() {
        return followers_count;
    }

    public void setFollowers_count(int followers_count) {
        this.followers_count = followers_count;
    }

    @Override
    public String toString() {
        return "User2{" +
                "name='" + name + '\'' +
                ", followers_count=" + followers_count +
                '}';
    }
}</span>



<span style="font-size:14px;">public class JSONActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_json);
    }

    public void jsonSimpleClick(View view){
        ArrayList<User> list = parseJSON();
        System.out.println(list);
    }
    private ArrayList<User> parseJSON() {
        InputStream in = getResources().openRawResource(R.raw.user);
        JsonReader jsonReader = new JsonReader(new InputStreamReader(in));
        ArrayList<User> list = new ArrayList<>();
        try {
            jsonReader.beginArray();
            while (jsonReader.hasNext()){
                User user = getUser(jsonReader);
                list.add(user);
            }
            jsonReader.endArray();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return list;
    }
    @NonNull
    private User getUser(JsonReader jsonReader) throws IOException {
        jsonReader.beginObject();
        User user = new User();
        while(jsonReader.hasNext()){
            String name = jsonReader.nextName();
            if("firstName".equals(name)){
                user.setFirstName(jsonReader.nextString());
            }else if("lastName".equals(name)){
                user.setLastName(jsonReader.nextString());
            }else if("email".equals(name)){
                user.setEmail(jsonReader.nextString());
            }
        }
        jsonReader.endObject();
        return user;
    }


    public void parseJSONClick(View view){
        ArrayList<Message> messages = parseJSON2();
        for (Message message : messages) {
            Log.i("Message",message.toString());
        }
    }


    private ArrayList parseJSON2() {
        InputStream in = getResources().openRawResource(R.raw.message);
        JsonReader jsonReader = new JsonReader(new InputStreamReader(in));
        try {
             return readMessageArray(jsonReader);
        }finally {
            try {
                jsonReader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }

    /**
     * 解析数组
     * @param jsonReader
     * @return
     */
    private ArrayList<Message> readMessageArray(JsonReader jsonReader){
        ArrayList<Message> messages = new ArrayList();
        try {
            jsonReader.beginArray();
            while (jsonReader.hasNext()){
                messages.add(readMessage(jsonReader));
            }
            jsonReader.endArray();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return messages;
    }

    /**
     * 解析一个对象
     * @param jsonReader
     * @return
     */
    private Message readMessage(JsonReader jsonReader) {
        Message m = null;
        String name = null;
        try {
            jsonReader.beginObject();
            m = new Message();
            while (jsonReader.hasNext()){
                name = jsonReader.nextName();
                if("id".equals(name)){
                    m.setId(jsonReader.nextLong());
                }else if("text".equals(name)){
                    m.setText(jsonReader.nextString());
                }else if("geo".equals(name) && jsonReader.peek()!= JsonToken.NULL){
                    m.setGeo(readGeo(jsonReader));
                }else if("user".equals(name)){
                    m.setUser2(readUser(jsonReader));
                }else{
                    jsonReader.skipValue();
                }
            }
            jsonReader.endObject();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return m;
    }

    //解析一个User对象
    private User2 readUser(JsonReader jsonReader) {
        User2 user = new User2();
        String name = null;
        try {
            jsonReader.beginObject();
            while (jsonReader.hasNext()){
                name = jsonReader.nextName();
                if("name".equals(name)){
                    user.setName(jsonReader.nextString());
                }else if("followers_count".equals(name)){
                    user.setFollowers_count(jsonReader.nextInt());
                }else{
//                    jsonReader.skipValue();
                }
            }
            jsonReader.endObject();
        } catch (IOException e) {
            e.printStackTrace();
        }

        return user;
    }

    /**
     * 解析Geo
     * @param jsonReader
     * @return
     */
    private ArrayList<Double> readGeo(JsonReader jsonReader) {
        ArrayList<Double> geo = new ArrayList();
        try {
            jsonReader.beginArray();
            while (jsonReader.hasNext()){
                geo.add(jsonReader.nextDouble());
            }
            jsonReader.endArray();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return geo;
    }

    /**
     * 生成一组JSON数据
     * @param view
     */
    public void createJSONClick(View view){
        ArrayList<User> users = new ArrayList<>();
        users.add(new User("hong","cai","hc@qq.com"));
        users.add(new User("da","lei","dalei@qq.com"));
        users.add(new User("zhang","wei","zw@qq.com"));
        createJSON(users);
    }

    /**
     * 创建 一个JSON数据
     * @param users
     * @return
     */
    private String createJSON(ArrayList<User> users) {
        JSONArray array = new JSONArray();
        for (User user : users) {
            JSONObject obj = new JSONObject();
            try {
                obj.put("firstName",user.getFirstName());
                obj.put("lastName",user.getLastName());
                obj.put("email",user.getEmail());
            } catch (JSONException e) {
                e.printStackTrace();
            }
            array.put(obj);
        }
        return array.toString();
    }


    public void gsonClick(View v){
        gson();
    }

    //使用GSON        需要在工程 目录下的 libs中 导入 gson  jar包添加到工程的libs目录下,并添加到工程的类库中即可。
    private void gson() {
        Gson gson = new Gson();
        //把JSON数据转换成JAVA对象
        String json = "{\"firstName\": \"DAI\",\"lastName\": \"BOBO\",\"email\": \"bobo@moliying.com\"}";
        User user = gson.fromJson(json,User.class);
        Log.i("JSON",user.toString());

        //把JSON数组转换成JAVA对象集合
        String json2 = "[{\"firstName\": \"DAI\",\"lastName\": \"BOBO\",\"email\": \"bobo@moliying.com\"}," +
                "{\"firstName\": \"hong\",\"lastName\": \"cai\",\"email\": \"hc@moliying.com\"}]";
        //new TypeToken<ArrayList<User>>(){}.getType()  指定使用类型存储JSON转换的对象
        ArrayList<User> list = gson.fromJson(json2, new TypeToken<ArrayList<User>>(){}.getType());
        for (User user1 : list) {
            Log.i("JSON",user1.toString());
        }

        //把对象转换成JSON数据
        User user3 = new User("hong","cai","hc@qq.com");
        String json4 = gson.toJson(user3);
        Log.i("JSON",json4);

        //把一组对象转换成JSON数组
        ArrayList<User> users = new ArrayList<>();
        users.add(new User("hong","cai","hc@qq.com"));
        users.add(new User("da","lei","dalei@qq.com"));
        users.add(new User("zhang","wei","zw@qq.com"));
        String json5 = gson.toJson(user);
        Log.i("JSON",json5);

    }

//    class MyTypeToken extends TypeToken<ArrayList<User>>{}</span>



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值