JSON数据解析

Posted 阿Hai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JSON数据解析相关的知识,希望对你有一定的参考价值。

Json的全称:javascript Object Notation,其本质是一系列键值对的集合。
 
Json建构于两种结构
  (1) “名称/值”对的集合,即一个对象。
  (2) 值的有序列表,即数组。
 

JSON的数据格式

  JSON对象是一个无序的“‘名称/值’对”集合:
  1个对象以"{}"大括号包围,即“{”(左括号)开始,“}”(右括号)结束。
  每个“名称”和"值"之间以“:”冒号分隔; “名称/值" 对之间使用“,”逗号分隔。如:
    {  “name”:”json”, “age”:4 }
  一个数组以"[]"中括号包围,即“[”(左中括号)开始,“]”(右中括号)结束。值之间使用“,”(逗号)分隔。如:
    [{"name":"zhang san", "male":"false"},{"name":"li si", "male":"true"}]
    复杂对象:{"teacher":[{"name":"zhang san", "male":"false"},{"name":"li si", "male":"true"}]}
 
JSON解析方式
  Gson
    Gson这个Java类库可以把Java对象转换成JSON,也可以把JSON字符串转换成一个相等的Java对象。
    Gson支持任意复杂Java对象包括没有源代码的对象。
  FastJson
    
FastJson是一个Json处理工具包,包括“序列化”和“反序列化”两部分,它具备如下特征:
 
  
    
速度最快,测试表明,fastjson具有极快的性能,超越任其他的Java Json parser。包括自称最快的JackJson。
      功能强大,完全支持Java Bean、集合、Map、日期、Enum,支持范型,支持自省。
      无依赖,能够直接运行在Java SE 5.0以上版本
      支持android
      开源 (Apache 2.0)
  
 
FastJson工具类
package com.diysoul.json.fastjson;

import java.util.List;
import java.util.Map;

import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;

public class JsonUtil {

    public JsonUtil() {
    }

    public static String createJson(Object object) {
        try {        
            return JSONObject.toJSONString(object);
        } catch (Exception e) {
        }
        return "";
    }

    public static String createJson(List<Object> object) {
        try {        
            return JSONObject.toJSONString(object);
        } catch (Exception e) {
        }
        return "";
    }

    public static <T> T getObject(String jsonString, Class<T> klass) {
        try {
            T Object = (T) JSONObject.parseObject(jsonString, klass);
            return Object;
        } catch (Exception e) {
            return null;
        }
    }

    public static <T> List<T> getObjects(String jsonString, Class<T> klass) {
        try {
            List<T> list = JSONObject.parseArray(jsonString, klass);
            return list;
        } catch (Exception e) {
            return null;
        }
    }

    public static <T> List<T> getObjects(String jsonString) {
        try {
            TypeReference<List<T>> typeReference = new TypeReference<List<T>>() {
            };
            List<T> list = JSONObject.parseObject(jsonString, typeReference);
            return list;
        } catch (Exception e) {
            return null;
        }
    }

    public static <K, V> List<Map<K, V>> getMaps(String jsonString) {
        try {
            TypeReference<List<Map<K, V>>> typeReference = new TypeReference<List<Map<K, V>>>() {
            };
            List<Map<K, V>> list = JSONObject.parseObject(jsonString, typeReference);
            return list;
        } catch (Exception e) {
            return null;
        }
    }
}

 

网上收集的测试代码,方便以后使用时查看
package com.android.mygson.gson;

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

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

public class GsonTools {

    public GsonTools() {
        // TODO Auto-generated constructor stub
    }

    /**
     * @param <T>
     * @param jsonString
     * @param cls
     * @return
     */
    public static <T> T getPerson(String jsonString, Class<T> cls) {
        T t = null;
        try {
            Gson gson = new Gson();
            t = gson.fromJson(jsonString, cls);
        } catch (Exception e) {
            // TODO: handle exception
        }
        return t;
    }

    /**
     * 使用Gson进行解析 List<Person>
     * 
     * @param <T>
     * @param jsonString
     * @param cls
     * @return
     */
    public static <T> List<T> getPersons(String jsonString, Class<T> cls) {
        List<T> list = new ArrayList<T>();
        try {
            Gson gson = new Gson();
            list = gson.fromJson(jsonString, new TypeToken<List<T>>() {
            }.getType());
        } catch (Exception e) {
        }
        return list;
    }

    /**
     * @param jsonString
     * @return
     */
    public static List<String> getList(String jsonString) {
        List<String> list = new ArrayList<String>();
        try {
            Gson gson = new Gson();
            list = gson.fromJson(jsonString, new TypeToken<List<String>>() {
            }.getType());
        } catch (Exception e) {
            // TODO: handle exception
        }
        return list;
    }

    public static List<Map<String, Object>> listKeyMaps(String jsonString) {
        List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
        try {
            Gson gson = new Gson();
            list = gson.fromJson(jsonString,
                    new TypeToken<List<Map<String, Object>>>() {
                    }.getType());
        } catch (Exception e) {
            // TODO: handle exception
        }
        return list;
    }

    /**
    * @param object
    * 是对解析的集合的类型
    * @return
    */
    public static String createJsonString(Object value) {
      Gson gson = new Gson();
      String str = gson.toJson(value);
      return str;
    }

}

package com.android.myjson.json;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

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

import com.android.myjson.domain.Person;

/**
 * 完成对json数据的解析
 * 
 * @author jack
 * 
 */
public class JsonTools {

    public JsonTools() {
        // TODO Auto-generated constructor stub
    }

    public static Person getPerson(String key, String jsonString) {
        Person person = new Person();
        try {
            JSONObject jsonObject = new JSONObject(jsonString);
            JSONObject personObject = jsonObject.getJSONObject("person");
            person.setId(personObject.getInt("id"));
            person.setName(personObject.getString("name"));
            person.setAddress(personObject.getString("address"));
        } catch (Exception e) {
            // TODO: handle exception
        }
        return person;
    }

    public static List<Person> getPersons(String key, String jsonString) {
        List<Person> list = new ArrayList<Person>();
        try {
            JSONObject jsonObject = new JSONObject(jsonString);
            // 返回json的数组
            JSONArray jsonArray = jsonObject.getJSONArray(key);
            for (int i = 0; i < jsonArray.length(); i++) {
                JSONObject jsonObject2 = jsonArray.getJSONObject(i);
                Person person = new Person();
                person.setId(jsonObject2.getInt("id"));
                person.setName(jsonObject2.getString("name"));
                person.setAddress(jsonObject2.getString("address"));
                list.add(person);
            }
        } catch (Exception e) {
            // TODO: handle exception
        }
        return list;
    }

    public static List<String> getList(String key, String jsonString) {
        List<String> list = new ArrayList<String>();
        try {
            JSONObject jsonObject = new JSONObject(jsonString);
            JSONArray jsonArray = jsonObject.getJSONArray(key);
            for (int i = 0; i < jsonArray.length(); i++) {
                String msg = jsonArray.getString(i);
                list.add(msg);
            }
        } catch (Exception e) {
            // TODO: handle exception
        }
        return list;
    }

    public static List<Map<String, Object>> listKeyMaps(String key,
            String jsonString) {
        List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
        try {
            JSONObject jsonObject = new JSONObject(jsonString);
            JSONArray jsonArray = jsonObject.getJSONArray(key);
            for (int i = 0; i < jsonArray.length(); i++) {
                JSONObject jsonObject2 = jsonArray.getJSONObject(i);
                Map<String, Object> map = new HashMap<String, Object>();
                Iterator<String> iterator = jsonObject2.keys();
                while (iterator.hasNext()) {
                    String json_key = iterator.next();
                    Object json_value = jsonObject2.get(json_key);
                    if (json_value == null) {
                        json_value = "";
                    }
                    map.put(json_key, json_value);
                }
                list.add(map);
            }
        } catch (Exception e) {
            // TODO: handle exception
        }
        return list;
    }
  
  /**
  * @param key
  * 表示json字符串的头信息
  * @param object
  * 是对解析的集合的类型
  * @return
  */
  public static String createJsonString(String key, Object value) {
    JSONObject jsonObject = new JSONObject();
    jsonObject.put(key, value);
    return jsonObject.toString();
  } }

以上是关于JSON数据解析的主要内容,如果未能解决你的问题,请参考以下文章

微信小程序json数据如何处理?

使用 json rereiver php mysql 在片段中填充列表视图

实用代码片段将json数据绑定到html元素 (转)

ios - Heroku 和 MongoDb 上的自定义解析服务器错误 3080:JSON 文本没有以数组或对象开头,并且允许未设置片段的选项

NodeJs GraphQL 片段解析器

如何在 Ios 中解析数组数据中的嵌套 Json 对象