`
jilong-liang
  • 浏览: 482666 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类

(转)Java构造和解析Json数据的两种方法详解二

    博客分类:
  • Json
阅读更多
      在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别。下面接着介绍用org.json构造和解析Json数据的方法示例。

      用json-lib构造和解析Json数据的方法详解请参见我上一篇博文:Java构造和解析Json数据的两种方法详解一

  一、介绍
org.json包是另一个用来beans,collections,maps,java arrays 和XML和JSON互相转换的包,主要就是用来解析Json数据,在其官网http://www.json.org/上有详细讲解,有兴趣的可以去研究。

二、下载jar依赖包
http://www.json.org/

由于org.json不能直接与bean进行转换,需要通过map进行中转,为了方便,我这里写了一个工具类JsonHelper,用于Json与Map、Bean的相互转换


package com.json;

import java.lang.reflect.Method;
import java.text.ParseException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

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

/**
*
* 1:将JavaBean转换成Map、JSONObject
* 2:将Map转换成Javabean
* 3:将JSONObject转换成Map、Javabean
*
* @author Alexia
*/

public class JsonHelper {
   
    /**
     * 将Javabean转换为Map
     *
     * @param javaBean
     *            javaBean
     * @return Map对象
     */
    public static Map toMap(Object javaBean) {

        Map result = new HashMap();
        Method[] methods = javaBean.getClass().getDeclaredMethods();

        for (Method method : methods) {

            try {

                if (method.getName().startsWith("get")) {

                    String field = method.getName();
                    field = field.substring(field.indexOf("get") + 3);
                    field = field.toLowerCase().charAt(0) + field.substring(1);

                    Object value = method.invoke(javaBean, (Object[]) null);
                    result.put(field, null == value ? "" : value.toString());

                }

            } catch (Exception e) {
                e.printStackTrace();
            }

        }

        return result;

    }

    /**
     * 将Json对象转换成Map
     *
     * @param jsonObject
     *            json对象
     * @return Map对象
     * @throws JSONException
     */
    public static Map toMap(String jsonString) throws JSONException {

        JSONObject jsonObject = new JSONObject(jsonString);
       
        Map result = new HashMap();
        Iterator iterator = jsonObject.keys();
        String key = null;
        String value = null;
       
        while (iterator.hasNext()) {

            key = (String) iterator.next();
            value = jsonObject.getString(key);
            result.put(key, value);

        }
        return result;

    }

    /**
     * 将JavaBean转换成JSONObject(通过Map中转)
     *
     * @param bean
     *            javaBean
     * @return json对象
     */
    public static JSONObject toJSON(Object bean) {

        return new JSONObject(toMap(bean));

    }

    /**
     * 将Map转换成Javabean
     *
     * @param javabean
     *            javaBean
     * @param data
     *            Map数据
     */
    public static Object toJavaBean(Object javabean, Map data) {

        Method[] methods = javabean.getClass().getDeclaredMethods();
        for (Method method : methods) {

            try {
                if (method.getName().startsWith("set")) {

                    String field = method.getName();
                    field = field.substring(field.indexOf("set") + 3);
                    field = field.toLowerCase().charAt(0) + field.substring(1);
                    method.invoke(javabean, new Object[] {

                    data.get(field)

                    });

                }
            } catch (Exception e) {
            }

        }

        return javabean;

    }

    /**
     * JSONObject到JavaBean
     *
     * @param bean
     *            javaBean
     * @return json对象
     * @throws ParseException
     *             json解析异常
     * @throws JSONException
     */
    public static void toJavaBean(Object javabean, String jsonString)
            throws ParseException, JSONException {

        JSONObject jsonObject = new JSONObject(jsonString);
   
        Map map = toMap(jsonObject.toString());
       
        toJavaBean(javabean, map);

    }

}


package com.json;

import java.text.ParseException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

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

/**
* 使用json-lib构造和解析Json数据
*
* @author Alexia
* @date 2013/5/23
*
*/
public class OrgJsonTest {

    /**
     * 构造Json数据
     *
     * @return
     * @throws JSONException
     */
    public static String BuildJson() throws JSONException {

        // JSON格式数据解析对象
        JSONObject jo = new JSONObject();

        // 下面构造两个map、一个list和一个Employee对象
        Map<String, String> map1 = new HashMap<String, String>();
        map1.put("name", "Alexia");
        map1.put("sex", "female");
        map1.put("age", "23");

        Map<String, String> map2 = new HashMap<String, String>();
        map2.put("name", "Edward");
        map2.put("sex", "male");
        map2.put("age", "24");

        List<Map> list = new ArrayList<Map>();
        list.add(map1);
        list.add(map2);

        Employee employee = new Employee();
        employee.setName("wjl");
        employee.setSex("female");
        employee.setAge(24);

        // 将Map转换为JSONArray数据
        JSONArray ja = new JSONArray();
        ja.put(map1);

        System.out.println("JSONArray对象数据格式:");
        System.out.println(ja.toString());

        // 将Javabean转换为Json数据(需要Map中转)
        JSONObject jo1 = JsonHelper.toJSON(employee);

        System.out.println("\n仅含Employee对象的Json数据格式:");
        System.out.println(jo1.toString());

        // 构造Json数据,包括一个map和一个含Employee对象的Json数据
        jo.put("map", ja);
        jo.put("employee", jo1.toString());
        System.out.println("\n最终构造的JSON数据格式:");
        System.out.println(jo.toString());

        return jo.toString();

    }

    /**
     * 解析Json数据
     *
     * @param jsonString
     *            Json数据字符串
     * @throws JSONException
     * @throws ParseException
     */
    public static void ParseJson(String jsonString) throws JSONException,
            ParseException {

        JSONObject jo = new JSONObject(jsonString);
        JSONArray ja = jo.getJSONArray("map");

        System.out.println("\n将Json数据解析为Map:");
        System.out.println("name: " + ja.getJSONObject(0).getString("name")
                + " sex: " + ja.getJSONObject(0).getString("sex") + " age: "
                + ja.getJSONObject(0).getInt("age"));

        String jsonStr = jo.getString("employee");
        Employee emp = new Employee();
        JsonHelper.toJavaBean(emp, jsonStr);

        System.out.println("\n将Json数据解析为Employee对象:");
        System.out.println("name: " + emp.getName() + " sex: " + emp.getSex()
                + " age: " + emp.getAge());

    }

    /**
     * @param args
     * @throws JSONException
     * @throws ParseException
     */
    public static void main(String[] args) throws JSONException, ParseException {
        // TODO Auto-generated method stub

        ParseJson(BuildJson());
    }

}
0
0
分享到:
评论

相关推荐

    使用Java构造和解析Json数据的两种方法(详解二)

    通过Java构造和解析JSON数据通常需要引入相应的jar依赖包。在Java项目中,可以通过Maven或Gradle这样的构建工具来添加依赖,从而避免手动下载jar包和管理依赖关系的复杂性。 总之,使用Java进行JSON数据的构造和...

    使用Java构造和解析Json数据的两种方法(详解一)

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式。接下来通过本文给大家介绍使用Java构造和解析Json数据的两种方法,需要的朋友参考下吧

    Json数据格式协议C#解析方法

    在C#中,有多种方法可以用来解析和生成JSON数据,其中最常见的两种方法是使用`Newtonsoft.Json`库和`DataContractJsonSerializer`。 ##### 使用Newtonsoft.Json方式 1. **安装Newtonsoft.Json**:首先需要在项目中...

    android解析JSON数据详解.pdf

    JSON的结构主要由两种基本元素构成:Name/Value Pairs(键值对)和Array(数组)。 Name/Value Pairs是无序的键值集合,类似于哈希表或关联数组。在Android中,有一个类似的类“Bundle”,它们在某些方面具有相似的...

    android解析JSON数据详解借鉴.pdf

    JSON结构主要由两种基本元素组成:Name/Value Pairs(键值对)和Array(数组)。键值对是无序的集合,类似于哈希表或关联数组,而数组则是有序的数据列表。 在Android平台中,JSON数据的解析通常依赖于Android SDK...

    Java解析Json.pdf

    ### Java解析JSON知识点详解 #### 一、引言 在现代软件开发中,尤其是在Web应用和服务端编程领域,JSON(JavaScript Object Notation)已经成为了一种非常流行的数据交换格式。它以其简洁、轻量且易于阅读的特点,...

    java反射实现javabean转json实例代码.docx

    ### Java反射机制实现JavaBean转JSON的详细解析 #### 一、引言 在现代软件开发过程中,数据格式转换是一项非常常见的任务。特别是在处理不同系统之间的数据交换时,JSON(JavaScript Object Notation)因其轻量级...

    详解android与服务端交互的两种方式

    本篇文章将重点讲解两种Android与服务端交互的方式,即使用Google原生的Gson库解析JSON数据以及使用JSONObject解析JSON数据。 首先,让我们详细了解使用Gson库解析JSON数据的方法。Gson是Google提供的一款强大的...

    JSON教程.pdf

    JSON支持两种基本结构:一种是由键值对组成的集合,类似Java中的`Map`;另一种是值的有序列表,类似Java中的`Array`。这种灵活性使其能够表达复杂的数据结构,同时保持简单易读的特点。 #### JSON数据示例 一个...

    net.sf.json.JSONObject对象使用指南

    JSON是一种基于文本的数据交换格式,主要包括两种结构:一种是“名称/值”对的集合,另一种是值的有序列表。前者类似于字典或哈希表,后者类似于数组。在Java中,这些结构分别对应于`Map`和`List`。 #### ...

    Java的JSON处理器fastjson使用方法详解

    在Java开发中,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,常用于前后端数据传输。Fastjson是阿里巴巴开发的一个高性能的JSON库,它不仅解析速度快,且功能强大,无需额外依赖,适用于各种Java...

    JSON教程 pdf

    - JSON支持两种主要的数据结构:键值对集合(类似Java中的`Map`)和值的有序列表(类似Java中的`Array`)。 - 示例:`{ "Name": "Apple", "Expiry": "2007/10/11 13:54", "Price": 3.99, "Sizes": [ "Small", ...

    json初学入门教程

    JSON支持两种基本的数据结构: 1. **Name-Value对(键值对):** 类似于Java中的Map,表示一系列名称与其对应的值。 2. **Value的有序列表:** 类似于Java中的Array,表示一个按顺序排列的值的列表。 **示例:** ```...

    JS对象之JSON详解[归类].pdf

    这种灵活性使得JavaScript成为一种强大的脚本语言,尤其适用于网页交互和数据处理。 6. **JSON的优势** - **简洁明了**:JSON格式清晰易读,便于人和机器解析。 - **跨语言支持**:许多编程语言都支持JSON,使得...

    java项目

    `getdata()`方法使用`StringBuilder`类构建了一个包含数组的JSON字符串,其中每个元素都有`name`和`value`两个属性。 ```csharp [WebMethod] public static string GetData() { StringBuilder str = new ...

    android简单天气预报源码

    开发者可能通过调用`JSONObject.parse()`和`JSONArray.getJSONArray()`等方法,手动解析JSON数据并存入对应的Java对象。 **二、天气预报API** 天气预报信息通常由第三方气象服务提供商提供,如OpenWeatherMap、...

    java 操作mongodb

    - MongoDB 支持 JSON 格式的数据,Java 驱动也提供了对 JSON 的解析和序列化功能。可以使用 `JSON.parse()` 解析 JSON 字符串为 `DBObject`,反之使用 `DBObject.toString()` 输出 JSON 格式。 通过以上步骤,初学...

    精讲RestTemplate,POST请求方法使用详解.docx

    对于 POST 请求,RestTemplate 提供了两种常用的方法: 1. **`postForObject()`** - **简介**:此方法用于发送 POST 请求,并获取响应体。 - **参数**:第一个参数为请求 URL,第二个参数为请求体(通常为一个...

    java 使用泛型.txt

    - 解析传入的JSON对象,提取主表和子表的数据。 - 将JSON数据转换为对应的对象或对象列表。 - 根据主表ID查询数据库,如果不存在则插入新记录;如果存在,则更新记录。 - 对子表进行批量插入或更新操作。 通过这种...

Global site tag (gtag.js) - Google Analytics