zoukankan      html  css  js  c++  java
  • JavaSE18章_JSON解析详解

    一、JSON简介

    JSON(JavaScript Object Notation),是一种轻量级的数据交换格式。JSON是存储和交换文本信息的,语法类似 XML。易于人阅读和编写,同时也易于机器解析和生成。JSON采用完全独立于语言的文本格式,但是也使JSON比XML更小、更快,更易解析。用了类似于C语言家族的习惯,这些特性使JSON成为理想的数据交换语言。

    二、JSON语法

    JSON具有以下这些形式:

    对象是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间使用“,”(逗号)分隔。

    数组是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间使用“,”(逗号)分隔。

    值(value)可以是双引号括起来的字符串(string)、数值(number)、truefalse、 null、对象(object)或者数组(array)。这些结构可以嵌套。

    字符串(string)是由双引号包围的任意数量Unicode字符的集合,使用反斜线转义。一个字符(character)即一个单独的字符串(character string)。

    字符串(string)与C或者Java的字符串非常相似。

    数值(number)也与C或者Java的数值非常相似。除去未曾使用的八进制与十六进制格式。除去一些编码细节。

    示例:

    {
    "name":"小明",
    "age":20,
    "car":false,
    "aihao":[{"id":1,"name":" 上网"},{"id":2,"name":"看电影"}],
    "zy":["Java","C++"],
    "注释":"这个是注释"
    }

    三、JSON解析

    1、常用的json解析,导入json-org.jar包,下载地址 https://github.com/stleary/JSON-java,示例代码如下

     1 import java.io.BufferedReader;
     2 import java.io.FileReader;
     3 import java.io.IOException;
     4 import org.json.JSONArray;
     5 import org.json.JSONException;
     6 import org.json.JSONObject;
     7 
     8 public class JsonReader {
     9 
    10     public static void main(String[] args) throws IOException, JSONException {
    11         
    12         //使用输入流,读取json文件
    13         BufferedReader br = new BufferedReader(new FileReader("person.json"));
    14         String str;
    15         StringBuilder sb = new StringBuilder();
    16         while((str=br.readLine())!=null){
    17             sb.append(str);
    18         }
    19         br.close();
    20         
    21         //实例化JSONObject,把json文件转为字符串形式来解析
    22         JSONObject obj = new JSONObject(sb.toString());
    23         System.out.println("姓名:"+obj.getString("name"));
    24         System.out.println("年龄:"+obj.getInt("age"));
    25         System.out.println("是否有车:"+obj.getBoolean("car"));
    26         
    27         //数组内的值为对象时,强转为JSONObject类型
    28         JSONArray arr = obj.getJSONArray("aihao");
    29         for (int i = 0; i < arr.length(); i++) {
    30             JSONObject arrObj = (JSONObject) arr.get(i);
    31             System.out.print("爱好"+arrObj.getInt("id")+":");
    32             System.out.println(arrObj.getString("name"));
    33         }
    34         
    35         //数组内的值为字符串时,强转为String类型
    36         JSONArray arr2 = obj.getJSONArray("zy");
    37         for (int i = 0; i < arr2.length(); i++) {
    38             String s = (String) arr2.get(i);
    39             System.out.println(s);
    40         }
    41         
    42         System.out.println(obj.getString("注释"));
    43 
    44     }
    45     
    46 }

     2、写出json文件

     1 package com.zhidi.gjson;
     2 
     3 import java.util.HashMap;
     4 import java.util.Map;
     5 
     6 import org.json.JSONException;
     7 import org.json.JSONObject;
     8 
     9 public class WriterJson {
    10 
    11     public static void main(String[] args) throws JSONException {
    12 //        WriterJson.JsonObject();
    13 //        WriterJson.JsonByMap();
    14         WriterJson.JsonByJavaBean();
    15 
    16     }
    17 
    18     
    19     public static void JsonObject() throws JSONException{
    20         JSONObject obj = new JSONObject();
    21         Object objnull = null;
    22         obj.put("name", "小明");
    23         obj.put("age", 20);
    24         obj.put("car", objnull);
    25         obj.put("zy", new String[]{"Java","C++"});
    26         System.out.println(obj.toString());
    27     }
    28     
    29     public static void JsonByMap(){
    30         Map<String,Object> map = new HashMap<String,Object>();
    31         map.put("name", "小明");
    32         map.put("age", 20);
    33         map.put("car", false);
    34         map.put("skill", new String[]{"挖掘机","厨师"});
    35         JSONObject obj = new JSONObject(map);
    36         System.out.println(obj.toString());
    37     }
    38     
    39     public static void JsonByJavaBean(){
    40         Person p = new Person();
    41         p.setName("小明");
    42         p.setAge(20);
    43         p.setZy(new String[]{"Java","C++"});
    44         
    45         System.out.println(new JSONObject(p).toString());
    46     }
    47     
    48 }

    3、使用GSON解析,导入gson-2.3.1.jar包

     1 import java.io.BufferedReader;
     2 import java.io.IOException;
     3 import java.io.InputStream;
     4 import java.io.InputStreamReader;
     5 import java.net.URL;
     6 
     7 import com.google.gson.JsonIOException;
     8 import com.google.gson.JsonObject;
     9 import com.google.gson.JsonParser;
    10 import com.google.gson.JsonSyntaxException;
    11 
    12 public class GJSONReaderDemo {
    13 
    14     public static void main(String[] args) throws JsonIOException, JsonSyntaxException, IOException {
    15         URL url = new URL("http://www.weather.com.cn/data/sk/101010100.html");
    16         InputStream is = url.openStream();
    17         InputStreamReader isr = new InputStreamReader(is,"utf-8");
    18         BufferedReader br = new BufferedReader(isr);
    19         String str ;
    20         StringBuilder sb = new StringBuilder();
    21         while((str=br.readLine())!=null){
    22             sb.append(str);
    23         }
    24         br.close();
    25         isr.close();
    26         is.close();
    27         JsonParser parser = new JsonParser();
    28         JsonObject object = (JsonObject) parser.parse(sb.toString());
    29         JsonObject obj = object.get("weatherinfo").getAsJsonObject();
    30         System.out.println(obj.get("city").getAsString());
    31         System.out.println(obj.get("WD").getAsString());
    32 
    33     }
    34     
    35     
    36 }

    4、使用GSON写出json文件

     1 import java.lang.reflect.Field;
     2 import com.google.gson.FieldNamingStrategy;
     3 import com.google.gson.Gson;
     4 import com.google.gson.GsonBuilder;
     5 import com.google.gson.JsonArray;
     6 import com.google.gson.JsonObject;
     7 
     8 public class GJSONWriterDemo {
     9 
    10     public static void main(String[] args) {
    11         
    12 //        GJSONWriterDemo.JavaBean();
    13         GJSONWriterDemo.JavaBean2();
    14 //        GJSONWriterDemo.JsonObj();
    15     }
    16     
    17     public static void JavaBean(){
    18         Person p = new Person();
    19         p.setName("小明");
    20         p.setAge(20);
    21         p.setZy(new String[]{"Java","C++"});
    22         
    23         Gson gson = new Gson();
    24         System.out.println(gson.toJson(p));
    25     }
    26     
    27     public static void JavaBean2(){
    28         Person p = new Person();
    29         p.setName("小明");
    30         p.setAge(20);
    31         p.setZy(new String[]{"Java","C++"});
    32         p.setNosee("这个属性看不到");
    33         
    34         GsonBuilder gb = new GsonBuilder();
    35         gb.setPrettyPrinting();
    36         gb.setFieldNamingStrategy(new FieldNamingStrategy() {
    37             
    38             @Override
    39             public String translateName(Field f) {
    40                 if(f.getName().equals("name")){
    41                     return "Name";
    42                 }
    43                 return f.getName();
    44             }
    45         });
    46         Gson gson = gb.create();
    47         System.out.println(gson.toJson(p));
    48     }
    49     
    50     public static void JsonObj(){
    51         JsonObject object = new JsonObject();
    52         object.addProperty("cat", "it");
    53         
    54         JsonArray array = new JsonArray();
    55         
    56         JsonObject obj = new JsonObject();
    57         obj.addProperty("id", 1);
    58         obj.addProperty("name", "java");
    59         array.add(obj);
    60         JsonObject obj2 = new JsonObject();
    61         obj2.addProperty("id", 1);
    62         obj2.addProperty("name", "java");
    63         array.add(obj2);
    64         
    65         object.add("language", array);
    66         object.addProperty("pop", true);
    67         
    68         System.out.println(object.toString());
    69     }
    70 
    71 }
  • 相关阅读:
    小注意1
    javascript求相对路径
    js网页返回顶部和楼层跳跃的实现原理
    函数传值的学习笔记
    每日一题——归并排序
    python文件处理
    Docker数据卷
    Docker镜像原理
    Docker可视化之Portainer
    Docker部署Nginx、Tomcat
  • 原文地址:https://www.cnblogs.com/jpwz/p/6053473.html
Copyright © 2011-2022 走看看