json解析

原创 2012年03月30日 20:22:36

 private String json =
   "[   " +
    "{     " +
     "\"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" +
     "}" +
    "}" +
   "]";

第一种解析:

package com.zhg.json1;

import java.util.ArrayList;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

public class JsonParser {
 public ArrayList<Demo> parse2List(String json) {
  ArrayList<Demo> demos = new ArrayList<Demo>();
  try {
   JSONArray array = new JSONArray(json);
   for (int i = 0; i < array.length(); i++) {
    Demo demo = new Demo();
    JSONObject obj = array.getJSONObject(i);
    demo.setId(obj.getLong("id"));
    demo.setText(obj.getString("text"));
    if (!obj.isNull("geo")) {
     double[] geo = new double[2];
     JSONArray geoArray = obj.getJSONArray("geo");
     geo[0] = geoArray.getDouble(0);
     geo[1] = geoArray.getDouble(1);
     demo.setGeo(geo);
    }
    JSONObject userObj = obj.getJSONObject("user");
    User user = new User();
    user.setName(userObj.getString("name"));
    user.setFollower_count(userObj.getInt("followers_count"));
    demo.setUser(user);

    demos.add(demo);
   }
  } catch (JSONException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  return demos;
 }

 public String parse2Json(ArrayList<Demo> demos) {
  String json = null;
  try {
   JSONArray array = new JSONArray();
   for (Demo demo : demos) {
    JSONObject obj = new JSONObject();
    obj.put("id", demo.getId());
    obj.put("text", demo.getText());
    if (demo.getGeo() == null) {
     obj.put("geo", JSONObject.NULL);
    } else {
     JSONArray geoArray = new JSONArray();
     geoArray.put(demo.getGeo()[0]);
     geoArray.put(demo.getGeo()[1]);
     obj.put("geo", geoArray);
    }
    JSONObject userObj = new JSONObject();
    userObj.put("name", demo.getUser().getName());
    userObj.put("followers_count", demo.getUser().getFollower_count());
    obj.put("user", userObj);
    array.put(obj);
   }
   json = array.toString();
  } catch (JSONException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  return json;
 }
}

 

第二种解析:

package com.zhg.json2;

import java.io.IOException;
import java.io.StringReader;
import java.io.StringWriter;
import java.util.ArrayList;

import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonToken;
import com.google.gson.stream.JsonWriter;

public class JsonParser {
 public ArrayList<Demo> parse2List(String json){
  ArrayList<Demo> demos = new ArrayList<Demo>();
  try {
   StringReader sr = new StringReader(json);
   JsonReader reader = new JsonReader(sr);
   reader.beginArray();
   while(reader.hasNext()){
    Demo demo = new Demo();
    reader.beginObject();
    while(reader.hasNext()){
     String name = reader.nextName();
     if(name.equals("id")){
      demo.setId(reader.nextLong());
     }else if(name.equals("text")){
      demo.setText(reader.nextString());
     }else if(name.equals("geo")){
      double[] geo = null;
      if(reader.peek()==JsonToken.NULL){
       reader.nextNull();
      }else{
       geo = new double[2];
       int i = 0;
       reader.beginArray();
       while(reader.hasNext()){
        geo[i++] = reader.nextDouble();
       }
       reader.endArray();
      }
      demo.setGeo(geo);
     }else if(name.equals("user")){
      User user = new User();
      reader.beginObject();
      while(reader.hasNext()){
       String uName = reader.nextName();
       if(uName.equals("name")){
        user.setName(reader.nextString());
       }else if(uName.equals("followers_count")){
        user.setFollower_count(reader.nextInt());
       }
      }
      reader.endObject();
      demo.setUser(user);
     }
    }
    reader.endObject();
    demos.add(demo);
   }
   reader.endArray();
   sr.close();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  return demos;
 }
 
 public String parse2Json(ArrayList<Demo> demos){
  String json = null;
  try {
   StringWriter sw = new StringWriter();
   JsonWriter writer = new JsonWriter(sw);
   writer.beginArray();
   for(Demo demo : demos){
    writer.beginObject();
    writer.name("id").value(demo.getId());
    writer.name("text").value(demo.getText());
    if(demo.getGeo()==null){
     writer.name("geo").nullValue();
    }else{
     writer.name("geo");
     writer.beginArray();
     writer.value(demo.getGeo()[0]);
     writer.value(demo.getGeo()[1]);
     writer.endArray();
    }
    writer.name("user");
    writer.beginObject();
    writer.name("name").value(demo.getUser().getName());
    writer.name("followers_count").value(demo.getUser().getFollower_count());
    writer.endObject();
    writer.endObject();
   }
   writer.endArray();
   writer.close();
   json = sw.toString();
   sw.close();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  return json;
 }
}

 

第三种解析:

package com.zhg.utils;

import java.io.IOException;
import java.io.Reader;
import java.util.ArrayList;

import com.google.gson.stream.JsonReader;
import com.zhg.entity.Student;

public class JsonParser {
 public ArrayList<Student> parseToList(Reader in){
  ArrayList<Student> stus = new ArrayList<Student>();
  try {
   JsonReader reader = new JsonReader(in);
   reader.beginArray();
   while(reader.hasNext()){
    Student stu = new Student();
    reader.beginObject();
    while(reader.hasNext()){
     String name = reader.nextName();
     if(name.equals("id")){
      stu.setId(reader.nextInt());
     }else if (name.equals("name")){
      stu.setName(reader.nextString());
     }else if(name.equals("sex")){
      stu.setSex(reader.nextString());
     }else if(name.equals("age")){
      stu.setAge(reader.nextInt());
     }
    }
    reader.endObject();
    stus.add(stu);
   }
   reader.endArray();
   reader.close();
   in.close();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  return stus;
 }
}

 

 

非标准JSON解析

String category = "{'v-soft-list':[{typecode:'zhuanbi',gametype:'赚币',count:5},{typecode:'dongzuo',ga...
  • superit401
  • superit401
  • 2016年06月22日 15:26
  • 870

Json解析速度问题

一直想测试一下json的解析速度,前些天终于花了一点时间测了一下,在我的破笔记本上,解析一个包含10个元素(各种类型都有)的object型json,1秒钟大概只能解析不到10w次,就算把内存池用到极致...
  • oldworm
  • oldworm
  • 2010年08月11日 22:04
  • 6653

go 语言解析复杂json

// Click here and start typing. package main import "fmt" import "encoding/json" type MxRecords st...
  • u010499721
  • u010499721
  • 2015年01月08日 16:39
  • 2100

JSON解析多解析类问题(二)

这一节主要来说说我前一段时间遇到的一个JSON解析问题,开始我没解决,现在分析可能是当时习惯了写一个解析类,不知道会出现要写多个解析类的问题,没跳出现有的思维模式。最后还是让我以前的同桌帮我解决的,在...
  • ljt2724960661
  • ljt2724960661
  • 2016年11月21日 14:30
  • 625

万能解析json

最近很多朋友问到我解析Json的问题,很多都是太复杂,解析起来很麻烦,但大部分都是使用工具进行解析,比如Gson之类的,但是这些有个问题就是要创建一个实体类bean,但是往往在很多开发过程中,后台返回...
  • greatdaocaoren
  • greatdaocaoren
  • 2017年06月28日 10:15
  • 230

json解析原理

json解析原理之Gson目标:了解json对象解析的大概过程 在这个序列化和反序列化的过程中,Gson充当的了一个解析器的角色。 第一阶段:了解Gson数据类型及其关系 第一:JsonElemen...
  • u013006139
  • u013006139
  • 2016年05月25日 17:51
  • 3884

JSON解析之原生解析

JSON解析之原生解析 JSON是首先一种数据结构,说白了就是对数据的描述,刚刚出现是为了取代XML可惜并没有,但是在做为配置文件上,却是很好,由于它小巧灵活 描述数据很好,所以在网络上进行数据...
  • android_lyp
  • android_lyp
  • 2016年07月30日 14:57
  • 3601

解析动态JSON入库

问题来源:http://bbs.csdn.net/topics/390611005 。   系统采集的JSON格式数据(s.json)如下:   {     “SUCCESS”: [...
  • u012388497
  • u012388497
  • 2015年12月08日 08:33
  • 1011

Json C++解析

一.下载开源库Jsoncpp,编译      参见:http://blog.sina.com.cn/s/blog_75f1902801015dx6.html,以示感谢。不过我下载 出来的是...
  • u011090298
  • u011090298
  • 2015年04月26日 23:11
  • 1660

使用dom4j解析XML为JSON

jar包为:dom4j-1.6.1.jar和fastjson-1.2.31.jar maven依赖为: dom4j dom4j 1.6.1 co...
  • sold_an
  • sold_an
  • 2017年09月26日 14:57
  • 294
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:json解析
举报原因:
原因补充:

(最多只允许输入30个字)