`
adoph
  • 浏览: 5380 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Json和Jsonlib的使用

 
阅读更多
Json 和 Jsonlib 的使用

一.什么是 Json
    JSON(JvaScript Object Notation)(官网网站:http://www.json.org/)是 一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。它基于 JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999 的一个子集。 JSON 采用完全独立于语言的文本格式,但是也使用了类似于 C 语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。 这些特性使 JSON 成为理想的数据交换语言。
A.JSON 的两种结构
    1.“名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表 (hash table),有键列表(keyed list),或者关联数组 (associative array)。 在 Java 语言中,我们可以将它理解成 HashMap。
对象是一个无序的"'名称/值'对"集合。一个对象以"{"(左括号)开始,"}"(右括号)结束。每个“名称”后跟一个":"(冒号);"'名称/值' 对"之间使用","(逗号)分隔。
示例:var json = {"name":"Jack","age":90,"Marray":true};
    2. 值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(Array 或 List)。
数组是值(value)的有序集合。一个数组以"["(左中括号)开始,"]"(右中括号)结束。值之间使用","(逗号)分隔。
示例:var json = ["Jack","Rose","Tom",89,true,false];


二.Json-lib
Json-lib 是一个 Java 类库(官网:http://json-lib.sourceforge.net/)可以实现如下功能:
转换 javabeans, maps, collections, java arrays 和 XML 成为 json 格式数据
转换 json 格式数据成为 javabeans 对象
Json-lib 需要的 jar 包
commons-beanutils-1.8.3.jar
commons-collections-3.2.1.jar
commons-lang-2.6.jar
commons-logging-1.1.1.jar
ezmorph-1.0.6.jar
json-lib-2.4-jdk15.jar

Json-lib 的使用
1. 将 Array 解析成 Json 串。使用 JSONArray 可以解析 Array 类型:
package cn.sunzn.json;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import net.sf.json.JSONArray;

public class JsonLib {
   public static void main(String[] args) {
       /**
        * 将 Array 解析成 Json 串
        */
       String[] str = { "Jack", "Tom", "90", "true" };
       JSONArray json = JSONArray.fromObject(str);
       System.err.println(json);

       /**
        * 对像数组,注意数字和布而值
        */
       Object[] o = { "北京", "上海", 89, true, 90.87 };
       json = JSONArray.fromObject(o);
       System.err.println(json);

       /**
        * 使用集合类
        */
       List<String> list = new ArrayList<String>();
       list.add("Jack");
       list.add("Rose");
       json = JSONArray.fromObject(list);
       System.err.println(json);

       /**
        * 使用 set 集
        */
       Set<Object> set = new HashSet<Object>();
       set.add("Hello");
       set.add(true);
       set.add(99);
       json = JSONArray.fromObject(set);
       System.err.println(json);
   }
}

运行结果如下:
["Jack","Tom","90","true"]
["北京","上海",89,true,90.87]
["Jack","Rose"]
[99,true,"Hello"]


2. 将 JavaBean/Map 解析成 JSON 串。 使用JSONObject 解析:
package cn.sunzn.json;


import java.util.HashMap;
import java.util.Map;

import net.sf.json.JSONObject;

public class JsonLib {
   @SuppressWarnings("static-access")
   public static void main(String[] args) {
       /**
        * 解析 HashMap
        */
       Map<String, Object> map = new HashMap<String, Object>();
       map.put("name", "Tom");
       map.put("age", 33);
       JSONObject jsonObject = JSONObject.fromObject(map);
       System.out.println(jsonObject);

       /**
        * 解析 JavaBean
        */
       Person person = new Person("A001", "Jack");
       jsonObject = jsonObject.fromObject(person);
       System.out.println(jsonObject);

       /**
        * 解析嵌套的对象
        */
       map.put("person", person);
       jsonObject = jsonObject.fromObject(map);
       System.out.println(jsonObject);
   }
}
运行结果如下:
{"age":33,"name":"Tom"}
{"id":"A001","name":"Jack"}
{"person":{"id":"A001","name":"Jack"},"age":33,"name":"Tom"}


3. 使用 JsonConfig 过虑属性:适用于 JavaBean/Map
package cn.sunzn.json;

import net.sf.json.JSONObject;
import net.sf.json.JsonConfig;

public class JsonLib {
   public static void main(String[] args) {
       JsonConfig config = new JsonConfig();
       config.setExcludes(new String[] { "name" });                      // 指定在转换时不包含哪些属性
       Person person = new Person("A001", "Jack");
       JSONObject jsonObject = JSONObject.fromObject(person, config);    // 在转换时传入之前的配置对象
       System.out.println(jsonObject);
   }
}
运行结果如下,在运行结果中我们可以看到 name 属性被过滤掉了:
{"id":"A001"}


4. 将 Json 串转换成 Array:
package cn.sunzn.json;

import java.util.Arrays;
import net.sf.json.JSONArray;

public class JsonLib {
   public static void main(String[] args) {
       JSONArray jsonArray = JSONArray.fromObject("[89,90,99]");
       Object array = JSONArray.toArray(jsonArray);
       System.out.println(array);
       System.out.println(Arrays.asList((Object[]) array));
   }
}
运行结果如下:
[Ljava.lang.Object;@1e5003f6
[89, 90, 99]


5. 将 Json 串转成 JavaBean/Map:
package cn.sunzn.json;

import java.util.Map;

import net.sf.json.JSONObject;

public class JsonLib {
   @SuppressWarnings("unchecked")
   public static void main(String[] args) {
       /**
        * 将 Json 形式的字符串转换为 Map
        */
       String str = "{\"name\":\"Tom\",\"age\":90}";
       JSONObject jsonObject = JSONObject.fromObject(str);
       Map<String, Object> map = (Map<String, Object>) JSONObject.toBean(jsonObject, Map.class);
       System.out.println(map);

       /**
        * 将 Json 形式的字符串转换为 JavaBean
        */
       str = "{\"id\":\"A001\",\"name\":\"Jack\"}";
       jsonObject = JSONObject.fromObject(str);
       System.out.println(jsonObject);
       Person person = (Person) JSONObject.toBean(jsonObject, Person.class);
       System.out.println(person);
   }
}
运行结果如下:
{age=90, name=Tom}
Person [id=A001, name=Jack]
在将 Json 形式的字符串转换为 JavaBean 的时候需要注意 JavaBean 中必须有无参构造函数,否则会报如下找不到初始化方法的错误:

Exception in thread "main" net.sf.json.JSONException: java.lang.NoSuchMethodException: cn.sunzn.json.Person.<init>()
   at net.sf.json.JSONObject.toBean(JSONObject.java:288)
   at net.sf.json.JSONObject.toBean(JSONObject.java:233)
   at cn.sunzn.json.JsonLib.main(JsonLib.java:23)
Caused by: java.lang.NoSuchMethodException: cn.sunzn.json.Person.<init>()
   at java.lang.Class.getConstructor0(Unknown Source)
   at java.lang.Class.getDeclaredConstructor(Unknown Source)
   at net.sf.json.util.NewBeanInstanceStrategy$DefaultNewBeanInstanceStrategy.newInstance(NewBeanInstanceStrategy.java:55)
   at net.sf.json.JSONObject.toBean(JSONObject.java:282)
   ... 2 more
分享到:
评论

相关推荐

    jsonlib需要jar包

    jsonlib需要jar包jsonlib需要jar包jsonlib需要jar包jsonlib需要jar包jsonlib需要jar包jsonlib需要jar包jsonlib需要jar包jsonlib需要jar包jsonlib需要jar包jsonlib需要jar包jsonlib需要jar包jsonlib需要jar包jsonlib...

    json lib json lib

    1. **JSON解析和生成**:JSON Lib可以将JSON字符串解析成JSON对象,反之亦然。这对于与服务器进行数据交互非常有用,比如AJAX请求。 2. **JSON对象操作**:库中包含了一系列类,如JSONObject、JSONArray,它们分别...

    编译好的json_lib.lib 包含64位,32位,头文件

    在本资源中,我们有一个名为`json_lib.lib`的预编译库,它适用于两种不同的处理器架构:64位和32位。这意味着无论你的项目是为64位还是32位系统构建,都可以使用这个库进行JSON操作。 `json_lib.lib`是一个静态链接...

    使用jsonlib需要的jar包

    使用JsonLib可以轻松地将Java对象转换为JSON字符串,或者将JSON字符串反序列化为Java对象,这对于数据交换和存储非常有用。 在Java项目中使用JsonLib时,首先需要将必要的jar包引入到项目的类路径中。以下是JsonLib...

    json-lib.jar

    对于`json-lib.jar`,开发者应该查阅`json.LICENSE`以确保遵循正确的使用条款,以避免法律问题。 总的来说,`json-lib.jar`是一个强大的JSON处理工具,为Java开发者提供了一种简单的方式来处理JSON数据,广泛应用于...

    json lib最新源代码

    json lib最新源代码json lib最新源代码json lib最新源代码json lib最新源代码json lib最新源代码json lib最新源代码json lib最新源代码json lib最新源代码json lib最新源代码json lib最新源代码json lib最新源代码...

    json lib jdk

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它采用完全独立于语言的文本格式,但也使用了类似于C家族语言...在实际项目中,正确理解和使用JSON Lib,能够有效提升JSON数据处理的效率和质量。

    使用json-lib实现json与Java对象的互转

    要使用 `json-lib` 实现 JSON 与 Java 对象的互转,首先需要在项目中引入该库。如果你使用的是 Maven,可以在 `pom.xml` 文件中添加如下依赖: ```xml &lt;groupId&gt;net.sf.json-lib&lt;/groupId&gt; &lt;artifactId&gt;json-lib...

    jsonlib.rar

    JSONLib是一个广泛使用的Java库,它提供了一系列的方法来序列化和反序列化Java对象为JSON字符串。 **JSON的基本结构与数据类型** 1. **对象(Object)**: JSON中的对象以大括号{}表示,由键值对组成,键和值之间用...

    JSONlib.rar

    在实际应用中,使用JSONlib可以方便地进行JSON数据的解析和生成,例如,你可以创建一个JSON对象,添加键值对,然后将其转换为字符串发送给服务器;反之,接收到服务器返回的JSON字符串后,可以通过JSONlib解析为Java...

    json-lib应用所有jar

    4. **兼容性**:JSON-lib兼容Java SE和Java EE环境,可以方便地在Web应用、企业服务和桌面应用中使用。 5. **错误处理**:提供了详细的异常处理机制,帮助开发者快速定位和解决问题。 在实际应用中,使用JSON-lib...

    jsonlib的所有包

    在使用Jsonlib时,首先需要将其引入到你的项目中。如果你的项目是Maven项目,可以在pom.xml文件中添加依赖。接着,你可以通过JsonSerializer和JsonParser等类来实现JSON的序列化和反序列化。例如,你可以将一个Java...

    json-lib jar和所有依赖的jar

    在文件列表中的"jsonlib需要jar包",这可能是指包含了`json-lib`库及其所有依赖的JAR文件。在实际项目中,将这些JAR文件添加到项目的类路径(classpath)中,就可以使用`json-lib`提供的功能,而无需通过Maven或其他...

    json-lib-2.4-jdk15.jar下载

    1. 简单易用:json-lib的API简单易于使用,一般只需要一行或两行代码就可以完成Java对象和JSON的相互转换。 2. 支持对象图:可以将复杂的对象层次结构与JSON相互转换,支持List、Map、数组等类型。 3. 支持注解:支持@...

    json-lib-2.1.jar和struts2-json-plugin-2.1.8.1.jar

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛应用于Web开发中,它易于人阅读和编写,同时也易于机器解析和生成。在Java世界里,`json-lib-2.1.jar` 是一个用于处理JSON的库,它提供了一系列...

    JSON-lib包json-lib-0.8.jar和json-lib-0.9.jar包

    标题中的"json-lib-0.8.jar"和"json-lib-0.9.jar"代表了JSON-lib的不同版本。每个版本可能包含一些新特性、修复的错误或者性能改进。例如,从0.8到0.9的升级,可能意味着开发团队已经对库进行了一些优化,增加了新的...

    json编译后的lib文件和json.h文件

    总结来说,这个资源提供了一个编译好的JSON处理库,开发者可以通过引用json.h头文件和链接lib文件,在自己的C++项目中方便地进行JSON数据的解析和生成,大大简化了与JSON数据交互的工作。无论是进行网络通信、存储...

    jsonlib相关jar包

    jsonlib及其依赖jar包,它包括commons-beanutils.jar,commons-collections.jar,commons-lang.jar,commons-logging-1.2.jar, ezmorph-1.0.6.jar,json-lib-2.4-jdk15.jar,这些库可以满足转化Java对象到json的...

Global site tag (gtag.js) - Google Analytics