Chinaunix首页 | 论坛 | 博客
  • 博客访问: 418385
  • 博文数量: 121
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1393
  • 用 户 组: 普通用户
  • 注册时间: 2014-03-11 12:17
个人简介

www.vibexie.com vibexie@qq.com

文章分类

全部博文(121)

文章存档

2015年(55)

2014年(66)

我的朋友

分类: Java

2015-04-20 10:59:17

org.json上提供了很多java处理json的工具,其中主要有org.json和json-lib
json-lib提供了许多org.json没有的功能,也就是对org.json的拓展,它需要很多的jar包,这里不多讲。
org.json是一个轻量级的java json处理工具,android sdk集成了org.json,所以我选择使用org.json,这篇博文也是将org.json。

关于org.json,官网www.json.org没有直接提供org.json的jar包,只提供了java源码。
先在官网下载java源码,下载源码链接会转到github:

下载这个项目,获得这些源码,用eclipse制作json.jar
这里直接分享我制作的json.jar json.zip
有兴趣的同学可以先看看源码。
先看看json.org.cn对org.json的描述

对于这几个重要的类,下面直接在代码中介绍。

实例讲解

  1. package com.vibexie.orgJson;

  2. import java.io.BufferedReader;
  3. import java.io.BufferedWriter;
  4. import java.io.File;
  5. import java.io.FileInputStream;
  6. import java.io.FileOutputStream;
  7. import java.io.IOException;
  8. import java.io.InputStream;
  9. import java.io.InputStreamReader;
  10. import java.io.OutputStream;
  11. import java.io.OutputStreamWriter;

  12. import org.json.JSONArray;
  13. import org.json.JSONObject;
  14. import org.json.JSONStringer;
  15. import org.json.JSONTokener;
  16. import org.json.JSONWriter;
  17. /**
  18.  * 测试的是org.json,不是json-lib
  19.  * Title : Test.java
  20.  * Company: ZhenBot
  21.  * Author : Vibe Xie @
  22.  * Time : Apr 20, 2015 8:25:54 AM
  23.  * Copyright: Copyright (c) 2015
  24.  * Description:
  25.  */
  26. public class Test {
  27.     
  28.     public static void main(String[] args) {
  29.         System.out.println("------------------使用JSONObject and JSONArray构造和解析json-----------------");
  30.         /**
  31.          * JSONObject,构建json对象
  32.          */
  33.         JSONObject jsonObject=new JSONObject();
  34.         jsonObject.put("name", "VibeXie");
  35.         jsonObject.put("phone", "18888888888");
  36.         
  37.         /**
  38.          * JSONArray,构建json数组
  39.          *
  40.          */
  41.         JSONArray jsonArray=new JSONArray();
  42.         jsonArray.put("vibexie@qq.com").put("809403300@qq.com");
  43.         /**
  44.          * 将jsonArray插入到jsonObject中
  45.          */
  46.         jsonObject.put("email", jsonArray);
  47.         
  48.         System.out.println("构建json...");
  49.         System.out.println(jsonObject);
  50.         
  51.         /**
  52.          * 解析json
  53.          */
  54.         System.out.println("解析json...");
  55.         System.out.println("name:"+jsonObject.get("name"));
  56.         System.out.println("phone:"+jsonObject.get("phone"));
  57.         
  58.         JSONArray emailArray=jsonObject.getJSONArray("email");
  59.         /**
  60.          * 注意获取JSONArray的index是从0开始的。
  61.          */
  62.         System.out.println("email:"+emailArray.getString(0)+","+emailArray.getString(1));
  63.         
  64.         
  65.         
  66.         System.out.println("\n\n------------------使用JSONStringer构造json-----------------");
  67.         
  68.         /**
  69.          * JSONStringer是一个构建json的工具
  70.          */
  71.         JSONStringer jsonStringer=new JSONStringer();
  72.         /**
  73.          * 注意一定要开头调用.object()结尾调用.endObject()方法。
  74.          */
  75.         jsonStringer.object()
  76.                     .key("name")
  77.                     .value("VibeXie")
  78.                     .key("phone")
  79.                     .value("18888888888")
  80.                     .key("email")
  81.                     .value(jsonArray)
  82.                     .endObject();
  83.         System.out.println("构建json...");
  84.         System.out.println(jsonStringer);
  85.         
  86.         System.out.println("解析json...");
  87.         System.out.println("name:"+jsonObject.get("name"));
  88.         System.out.println("phone:"+jsonObject.get("phone"));
  89.         System.out.println("email:"+emailArray.getString(0)+","+emailArray.getString(1));
  90.         
  91.         System.out.println("\n\n------------------使用JSONTokener解析json字符串-----------------");
  92.         /**
  93.          * JSONTokener读取源字符串, 并解析成token. 它被JSONObject和JSONArray使用来解析JSON字符串.
  94.          */
  95.         
  96.         System.out.println("使用JSONObject.nextValue...");
  97.         JSONTokener jsonTokener1=new JSONTokener(jsonObject.toString());
  98.         JSONObject jsonObject1=(JSONObject)jsonTokener1.nextValue();
  99.         System.out.println("构建json...");
  100.         System.out.println(jsonObject1);
  101.         
  102.         System.out.println("\n使用JSONObject.nextValue...");
  103.         JSONTokener jsonTokener2=new JSONTokener(jsonObject.toString());
  104.         /**
  105.          * 截取当前位置到之后第一个'n'字符之间的字符串,这里的当前位置是起始位置0
  106.          */
  107.         System.out.println(jsonTokener2.nextString('n'));
  108.         /**
  109.          * 截取当前位置到之后第一个'8'字符之间的字符串,这里的当前位置是前面'n'字符
  110.          */
  111.         System.out.println(jsonTokener2.nextString('8'));
  112.         /**
  113.          * 这里nextValue()获取'8'后面的一个字符串,也就是"88888888",这样你就明白nextValue()的作用了
  114.          */
  115.         System.out.println(jsonTokener2.nextValue());
  116.         /**
  117.          * 再获取下一个一个字符串,也就是"88888888"后面的",",注意","也是下一个value,它是一个字符串
  118.          */
  119.         System.out.println(jsonTokener2.nextValue());

  120.         /**
  121.          * 关于JSONTokener,不再测试其它方法了,要理解这就是一个解析json字符串的一个工具,通过移动字符串当前字符位置来解析字符串
  122.          */
  123.         
  124.         
  125.         System.out.println("\n\n------------------使用JSONWriter将json写入io流或者从io流读取-----------------");
  126.         JSONWriter jsonWriter=null;
  127.         BufferedWriter bufferedWriter=null;
  128.         BufferedReader bufferedReader=null;
  129.         try {
  130.             /**
  131.              * 将json保存到文件/home/vibexie/test.json
  132.              */
  133.             OutputStream outputStream=new FileOutputStream(new File("/home/vibexie/test.json"));
  134.             bufferedWriter=new BufferedWriter(new OutputStreamWriter(outputStream));
  135.             jsonWriter = new JSONWriter(bufferedWriter);
  136.             System.out.println("将json写入到文件/home/vibexie/test.json...");
  137.             /**
  138.              * 注意,调用endObject()默认调用BufferedWriter.write()方法写入io流
  139.              */
  140.             jsonWriter.object()
  141.                      .key("name")
  142.                      .value("VibeXie")
  143.                      .key("phone")
  144.                      .value("18888888888")
  145.                      .key("email")
  146.                      .value(jsonArray)
  147.                      .endObject();
  148.             /**
  149.              * flush必须调用
  150.              */
  151.             bufferedWriter.flush();
  152.             
  153.             /**
  154.              * 从文件/home/vibexie/test.json读取json
  155.              */
  156.             InputStream inputStream=new FileInputStream(new File("/home/vibexie/test.txt"));
  157.             bufferedReader=new BufferedReader(new InputStreamReader(inputStream));
  158.             System.out.println("从文件/home/vibexie/test.json读取json...");
  159.             System.out.println(bufferedReader.readLine());

  160.         } catch (IOException e) {
  161.             // TODO Auto-generated catch block
  162.             e.printStackTrace();
  163.         }finally{
  164.             try {
  165.                 /**
  166.                  * 关闭io
  167.                  */
  168.                 bufferedWriter.close();
  169.                 bufferedReader.close();
  170.             } catch (IOException e) {
  171.                 // TODO Auto-generated catch block
  172.                 e.printStackTrace();
  173.             }
  174.         }
  175.     }
  176. }
请自己运行看结果。注意要加入自己制作的json.jar包,也可以使用我所提供的json.jar包
阅读(2410) | 评论(0) | 转发(0) |
0

上一篇:Java设计模式之单例模式

下一篇:nginx详解

给主人留下些什么吧!~~