zoukankan      html  css  js  c++  java
  • JAVA & JSON详解

    JSON定义

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C++、C#、Java、JavaScript、Perl、Python等)。这些特性使JSON成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成(网络传输速率)。

    JSON用途

    • 使用基于JavaScript的应用程序,其中包括浏览器扩展和网站

    • 使用JSON格式序列化和结构化的数据传输网络连接

    • 这主要用于服务器和Web应用程序之间的数据传输

    • Web服务和API采用JSON格式提供公共数据

    • 它可以用来与现代编程语言

    JSON的特点

    • 易于读写JSON

    • 轻量级的基于文本的交换格式

    • 独立语言

    JSON 语法规则

    JSON 语法是 JavaScript 对象表示语法的子集。
    • 数据在键值对中
    • 数据由逗号分隔
    • 花括号保存对象
    • 方括号保存数组

    JSON 名称/值对

    JSON 数据的书写格式是:名称/值对。
    名称/值对组合中的名称写在前面(在双引号中),值对写在后面(同样在双引号中),中间用冒号隔开:
    {"firstName":"Brett","lastName":"McLaughlin","email":"aaaa"}
    

      JSON格式支持的数据类型有以下:

    类型描述
    Number 在JavaScript中的双精度浮点格式
    String 双引号的反斜杠转义的Unicode
    Boolean true 或 false
    Array 值的有序序列
    Value 它可以是一个字符串,一个数字,真的还是假(true/false),空(null )等
    Object 无序集合键值对
    Whitespace 可以使用任何一对中的令牌
    null empty

    以下转自:易百教程网

    JSON和Java实体之间的映射

    JSON.simple实体映射从左侧向右侧解码或解析,并映射实体从右侧到左侧编码。

    JSONJava
    string java.lang.String
    number java.lang.Number
    true|false ava.lang.Boolean
    null null
    array java.util.List
    object java.util.Map

    虽然解码,默认 java.util.List的具体类是具体类 org.json.simple.JSONArray 和默认 java.util.Map 是org.json.simple.JSONObject。

    下面是一个简单的例子来编码JSONObject使用Java的JSON对象的一个子类的java.util.HashMap 无序。如果您需要严格的顺序元素使用方法JSONValue.toJSONString(映射)有序映射实现作为 java.util.LinkedHashMap等。

    import org.json.simple.JSONObject;
    
    class JsonEncodeDemo 
    {
       public static void main(String[] args) 
       {
          JSONObject obj = new JSONObject();
    
          obj.put("name", "foo");
          obj.put("num", new Integer(100));
          obj.put("balance", new Double(1000.21));
          obj.put("is_vip", new Boolean(true));
    
          System.out.print(obj);
       }
    }
    

      

    虽然上述程序的编译和执行,这将产生以下结果:

    {"balance": 1000.21, "num":100, "is_vip":true, "name":"foo"}

    以下是另一个例子,它显示了使用Java的JSONObject 的 JSON对象流:

    import org.json.simple.JSONObject;
    
    class JsonEncodeDemo 
    {
       public static void main(String[] args) 
       {
          JSONObject obj = new JSONObject();
    
          obj.put("name","foo");
          obj.put("num",new Integer(100));
          obj.put("balance",new Double(1000.21));
          obj.put("is_vip",new Boolean(true));
    
          StringWriter out = new StringWriter();
          obj.writeJSONString(out);
          
          String jsonText = out.toString();
          System.out.print(jsonText);
       }
    } 

    虽然上述程序的编译和执行,这将产生以下结果:

    {"balance": 1000.21, "num":100, "is_vip":true, "name":"foo"} 

    在Java的JSON解码

    下面的例子利用的JSONObject 和JSONArray JSONObject 是一个java.util.Map JSONArray是一个java.util.List,所以可以对其进行访问 Map 和List 的标准操作。

    import org.json.simple.JSONObject;
    import org.json.simple.JSONArray;
    import org.json.simple.parser.ParseException;
    import org.json.simple.parser.JSONParser;
    
    class JsonDecodeDemo 
    {
       public static void main(String[] args) 
       {
          JSONParser parser=new JSONParser();
          String s = "[0,{"1":{"2":{"3":{"4":[5,{"6":7}]}}}}]";
          try{
             Object obj = parser.parse(s);
             JSONArray array = (JSONArray)obj;
             System.out.println("The 2nd element of array");
             System.out.println(array.get(1));
             System.out.println();
    
             JSONObject obj2 = (JSONObject)array.get(1);
             System.out.println("Field "1"");
             System.out.println(obj2.get("1"));    
    
             s = "{}";
             obj = parser.parse(s);
             System.out.println(obj);
    
             s= "[5,]";
             obj = parser.parse(s);
             System.out.println(obj);
    
             s= "[5,,2]";
             obj = parser.parse(s);
             System.out.println(obj);
          }catch(ParseException pe){
             System.out.println("position: " + pe.getPosition());
             System.out.println(pe);
          }
       }
    }

    虽然上述程序的编译和执行,这将产生以下结果:

    The 2nd element of array
    {"1":{"2":{"3":{"4":[5,{"6":7}]}}}}
    
    Field "1"
    {"2":{"3":{"4":[5,{"6":7}]}}}
    {}
    [5]
    [5,2]
  • 相关阅读:
    平衡二叉树之RB树
    平衡二叉树之AVL树
    实现哈希表
    LeetCode Median of Two Sorted Arrays
    LeetCode Minimum Window Substring
    LeetCode Interleaving String
    LeetCode Regular Expression Matching
    PAT 1087 All Roads Lead to Rome
    PAT 1086 Tree Traversals Again
    LeetCode Longest Palindromic Substring
  • 原文地址:https://www.cnblogs.com/oumyye/p/4760261.html
Copyright © 2011-2022 走看看