>웹 프론트엔드 >JS 튜토리얼 >JSONObject_javascript 스킬 사용법에 대한 자세한 설명

JSONObject_javascript 스킬 사용법에 대한 자세한 설명

WBOY
WBOY원래의
2016-05-16 15:24:591740검색

1.JSON객체 소개

JSONObject-lib 패키지는 Bean, 컬렉션, 맵, Java 배열, xml을 JSON으로 변환하기 위한 패키지입니다.

2. jar 패키지 다운로드

http://files.cnblogs.com/java-pan/lib.rar

JSONObject의 jar에 의존하는 6개의 다른 jar 패키지, 총 7개의 jar 파일을 제공합니다.

참고: 직장에서 프로젝트에 사용된 버전은 1.1이며, 이는 jdk1.3 버전에 해당하므로 이 블로그는 1.1 버전을 기준으로 작성되었습니다.

이 버전에 해당하는 javadoc 다운로드 경로는 다음과 같습니다. http://sourceforge.net/projects/json-lib/files/json-lib/json-lib-1.1/

최신 버전은 2.4입니다. 기타 버전의 다운로드 주소는 http://sourceforge.net/projects/json-lib/files/json-lib/

입니다.

3. 프로젝트 환경:

시스템: WIN7 myeclipse: 6.5 tomcat: 5.0 JDK: 개발 환경과 컴파일 모두 1.5 사용

프로젝트 구성은 다음과 같습니다.

참고: 이번에 사용한 파일은 프로젝트 디렉터리의 json 패키지에 있는 JSONObject_1_3 클래스와 note.txt뿐입니다

1.1 기반의 4.class&method API

다음과 같은 계약을 체결하세요.

1. JSONObject 1.1 기반 API 소개

2. 자주 사용되는 클래스와 메소드만 소개

3. 이 버전은 더 이상 권장되지 않습니다.

4. 소개된 클래스와 메소드는 주로 본 블로그에서 사용된 클래스와 메소드를 중심으로 작성되었습니다

JSONObject:A JSONObject is an unordered collection of name/value pairs.

은 최종 클래스이며 Object를 상속하고 JSON 인터페이스를 구현합니다.

시공방법은 다음과 같습니다.

JSONObject(); 빈 JSONObject 객체 생성

JSONObject(boolean isNull); 비어 있는지 여부에 관계없이 JSONObject 객체를 생성합니다

일반적인 방법은 다음과 같습니다.

fromBean(Object bean); 정적 메소드, pojo 객체를 통해 JSONObject 객체를 생성합니다

fromJSONObject(JSONObject 객체); 정적 메서드, 다른 JSONObject 객체를 통해 JSONObject 객체를 생성합니다

fromJSONString(JSONString string); 정적 메소드, JSONString을 통해 JSONObject 객체를 생성합니다

toString(); JSONObject 객체를 json 형식 문자열로 변환

iterator()는 요소를 순회하기 위해 Iterator 객체를 반환합니다.

다음은 몇 가지 put/get 메소드입니다. API는 다음과 같이 설명됩니다.

get 메소드는 값을 찾을 수 있으면 값을 반환하고, 값을 찾을 수 없으면 예외를 발생시킵니다. opt 메소드는 예외를 발생시키는 대신 기본값을 반환하므로 선택적 값을 얻는 데 유용합니다.

JSONArray:JSONArray는 순서가 지정된 값 시퀀스입니다.

은 최종 클래스이며 Object를 상속하고 JSON 인터페이스를 구현합니다.

시공방법은 다음과 같습니다.

JSONArray()는 빈 JSONArray 객체를 생성합니다

일반적인 방법은 다음과 같습니다.

fromArray(Object[] array); 정적 메소드, Java 배열을 통해 JSONArray 객체를 생성합니다

fromCollection(Collection collection); 정적 메소드, 컬렉션 객체를 통해 JSONArray 객체를 생성합니다

fromString(String string); 정적 메소드, json 형식 문자열에서 JSONArray 객체를 구성합니다

toString(); JSONArray 객체를 json 형식 문자열로 변환

iterator()는 요소를 순회하기 위해 Iterator 객체를 반환합니다.

다음 단계도 put/get 메소드입니다...

XMLSerializer:JSON을 XML로 변환하는 유틸리티 클래스

Object를 상속받은 클래스

시공방법은 다음과 같습니다.

XMLSerializer(); XMLSerializer 객체 생성

일반적인 방법은 다음과 같습니다.

setRootName(String rootName); 변환된 xml의 루트 요소 이름을 설정합니다

setTypeHintsEnabled(boolean typeHintsEnabled) 각 요소에 유형 속성이 표시되는지 여부 설정

write(JSON json); json 객체를 xml로 변환합니다. 기본 문자 인코딩은 UTF-8입니다.

인코딩 설정이 필요한 경우 write(JSON json, String 인코딩)을 사용하면 됩니다

5. XML 및 JSON 문자열의 각 열에 대한 간단한 예

JSON:

{"password":"123456","username":"张三"}

xml

<&#63;xml version="1.0" encoding="UTF-8"&#63;> 
<user_info>
<password>123456</password>
<username>张三</username>
</user_info>

시작

프로젝트 이름이 JS인 새 웹 프로젝트를 만들고 다음 7개의 jar 패키지를 가져옵니다. 파일은 이전 준비 경로에서 다운로드됩니다.

참고: 새 웹 프로젝트를 만들 필요는 없습니다. 일반 Java 프로젝트도 이 문서의 작업을 완료할 수 있습니다. json 패키지 외에 다른 6개 패키지를 import 해야하는 이유는 한눈에 알 수 있도록 마지막에 note.txt 를 올려드리겠습니다.

질문1: 프런트엔드에서 수신한 json 형식 문자열을 백그라운드에서 어떻게 처리하나요?

 public static void jsonToJAVA() {
 System.out.println("json字符串转java代码");
 String jsonStr = "{\"password\":\"\",\"username\":\"张三\"}";
 JSONObject jsonObj = JSONObject.fromString(jsonStr);
 String username = jsonObj.getString("username");
 String password = jsonObj.optString("password");
 System.out.println("json--->java\n username=" + username
 + "\t password=" + password);
 }

question2:后台是怎么拼装json格式的字符串?

 public static void javaToJSON() {
 System.out.println("java代码封装为json字符串");
 JSONObject jsonObj = new JSONObject();
 jsonObj.put("username", "张三");
 jsonObj.put("password", "");
 System.out.println("java--->json \n" + jsonObj.toString());
 }

 

question3:json格式的字符串怎么转换为xml格式的字符串?

 public static void jsonToXML() {
 System.out.println("json字符串转xml字符串");
 String jsonStr = "{\"password\":\"\",\"username\":\"张三\"}";
 JSONObject json = JSONObject.fromString(jsonStr);
 XMLSerializer xmlSerializer = new XMLSerializer();
 xmlSerializer.setRootName("user_info");
 xmlSerializer.setTypeHintsEnabled(false);
 String xml = xmlSerializer.write(json);
 System.out.println("json--->xml \n" + xml);
 }

 

question4:xml格式的字符串怎么转换为json格式的字符串?

public static void xmlToJSON(){
 System.out.println("xml字符串转json字符串");
 String xml = "<&#63;xml version=\".\" encoding=\"UTF-\"&#63;><user_info><password></password><username>张三</username></user_info>";
 JSON json=XMLSerializer.read(xml);
 System.out.println("xml--->json \n"+json.toString());
 }

 

question5:javabean怎么转换为json字符串?

public static void javaBeanToJSON() {
 System.out.println("javabean转json字符串");
 UserInfo userInfo = new UserInfo();
 userInfo.setUsername("张三");
 userInfo.setPassword("");
 JSONObject json = JSONObject.fromBean(userInfo);
 System.out.println("javabean--->json \n" + json.toString());
 }

 

question6:javabean怎么转换为xml字符串?

public static void javaBeanToXML() {
 System.out.println("javabean转xml字符串");
 UserInfo userInfo = new UserInfo();
 userInfo.setUsername("张三");
 userInfo.setPassword("");
 JSONObject json = JSONObject.fromBean(userInfo);
 XMLSerializer xmlSerializer = new XMLSerializer();
 String xml = xmlSerializer.write(json, "UTF-");
 System.out.println("javabean--->xml \n" + xml);
 }

 

完整的JSONObject_1_3.java代码如下:

JSONObject_1_3
 package json;
 import net.sf.json.JSON;
 import net.sf.json.JSONObject;
 import net.sf.json.xml.XMLSerializer;
 public class JSONObject__ {
 public static void javaToJSON() {
 System.out.println("java代码封装为json字符串");
 JSONObject jsonObj = new JSONObject();
 jsonObj.put("username", "张三");
 jsonObj.put("password", "");
 System.out.println("java--->json \n" + jsonObj.toString());
 }
 public static void jsonToJAVA() {
 System.out.println("json字符串转java代码");
 String jsonStr = "{\"password\":\"\",\"username\":\"张三\"}";
 JSONObject jsonObj = JSONObject.fromString(jsonStr);
 String username = jsonObj.getString("username");
 String password = jsonObj.optString("password");
 System.out.println("json--->java\n username=" + username
 + "\t password=" + password);
 }
 public static void jsonToXML() {
 System.out.println("json字符串转xml字符串");
 String jsonStr = "{\"password\":\"\",\"username\":\"张三\"}";
 JSONObject json = JSONObject.fromString(jsonStr);
 XMLSerializer xmlSerializer = new XMLSerializer();
 xmlSerializer.setRootName("user_info");
 xmlSerializer.setTypeHintsEnabled(false);
 String xml = xmlSerializer.write(json);
 System.out.println("json--->xml \n" + xml);
 }
 public static void javaBeanToJSON() {
 System.out.println("javabean转json字符串");
 UserInfo userInfo = new UserInfo();
 userInfo.setUsername("张三");
 userInfo.setPassword("");
 JSONObject json = JSONObject.fromBean(userInfo);
 System.out.println("javabean--->json \n" + json.toString());
 }
 public static void javaBeanToXML() {
 System.out.println("javabean转xml字符串");
 UserInfo userInfo = new UserInfo();
 userInfo.setUsername("张三");
 userInfo.setPassword("");
 JSONObject json = JSONObject.fromBean(userInfo);
 XMLSerializer xmlSerializer = new XMLSerializer();
 String xml = xmlSerializer.write(json, "UTF-");
 System.out.println("javabean--->xml \n" + xml);
 }
 public static void xmlToJSON(){
 System.out.println("xml字符串转json字符串");
 String xml = "<?xml version=\".\" encoding=\"UTF-\"?>张三";
 JSON json=XMLSerializer.read(xml);
 System.out.println("xml--->json \n"+json.toString());
 }
 public static void main(String args[]) {
 // javaToJSON();
 // jsonToJAVA();
 // jsonToXML();
 // javaBeanToJSON();
 // javaBeanToXML();
 xmlToJSON();
 }
 }

完整的UserInfo.java代码如下:

UserInfo
 package json;
 public class UserInfo {
 public String username;
 public String password;
 public String getUsername() {
 return username;
 }
 public void setUsername(String username) {
 this.username = username;
 }
 public String getPassword() {
 return password;
 }
 public void setPassword(String password) {
 this.password = password;
 }
 }

result

代码和运行结果都已经贴在每个问题的后面,运行时直接用main方法分别对每个方法运行即可看到测试效果。

note.txt是报的对应的错误及解决方法,也从另一个方面说明为什么需要导入前面提到的jar包;

note.txt文件内容如下:

java.lang.NoClassDefFoundError: org/apache/commons/lang/exception/NestableRuntimeException 
at java.lang.ClassLoader.defineClass0(Native Method) 
at java.lang.ClassLoader.defineClass(ClassLoader.java:537) 
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:123) 
at java.net.URLClassLoader.defineClass(URLClassLoader.java:251) 
at java.net.URLClassLoader.access$100(URLClassLoader.java:55) 
at java.net.URLClassLoader$1.run(URLClassLoader.java:194) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.net.URLClassLoader.findClass(URLClassLoader.java:187) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:289) 
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:274) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:235) 
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302) 
at generate.TestJSONObject.main(TestJSONObject.java:40) 
Exception in thread "main" 

解决方案:导入commons-lang-2.1.jar

java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory 
at net.sf.json.JSONObject.<clinit>(JSONObject.java:125) 
at generate.TestJSONObject.main(TestJSONObject.java:40) 
Exception in thread "main" 

解决方案:导入commons-logging.jar

java.lang.NoClassDefFoundError: org/apache/commons/beanutils/DynaBean 
at net.sf.json.JSONObject.set(JSONObject.java:2164) 
at net.sf.json.JSONObject.put(JSONObject.java:1853) 
at net.sf.json.JSONObject.put(JSONObject.java:1806) 
at generate.TestJSONObject.main(TestJSONObject.java:41) 
Exception in thread "main" 

解决方案:导入commons-beanutils.jar

java.lang.NoClassDefFoundError: net/sf/ezmorph/MorpherRegistry 
at net.sf.json.util.JSONUtils.<clinit>(JSONUtils.java:65) 
at net.sf.json.JSONObject.set(JSONObject.java:2164) 
at net.sf.json.JSONObject.put(JSONObject.java:1853) 
at net.sf.json.JSONObject.put(JSONObject.java:1806) 
at generate.TestJSONObject.main(TestJSONObject.java:41) 
Exception in thread "main" 

解决方案:导入ezmorph-1.0.2.jar

java.lang.NoClassDefFoundError: org/apache/commons/collections/FastHashMap 
at org.apache.commons.beanutils.PropertyUtils.<clinit>(PropertyUtils.java:208) 
at net.sf.json.JSONObject.fromBean(JSONObject.java:190) 
at net.sf.json.JSONObject.fromObject(JSONObject.java:437) 
at net.sf.json.JSONObject.set(JSONObject.java:2196) 
at net.sf.json.JSONObject.put(JSONObject.java:1853) 
at net.sf.json.JSONObject.put(JSONObject.java:1806) 
at generate.TestJSONObject.main(TestJSONObject.java:41) 
Exception in thread "main" 

解决方案:导入commons-collections-3.0.jar

Exception in thread "main" java.lang.NoClassDefFoundError: nu/xom/Serializer 
at generate.TestJSONObject.jsonToXML(TestJSONObject.java:88) 
at generate.TestJSONObject.main(TestJSONObject.java:96) 

解决方案:导入xom-1.0d10.jar

几点说明:

1.注意UserInfo类的修饰符,用public修饰,变量username和password也用public修饰,最好单独的写一个类,这里就不贴出来了

2.以上json字符串和xml字符串都是最简单的形式,实际开发中json字符串和xml格式比这个复杂的多,

处理复杂的json字符串,可以封装写一个类继承HashMap,然后重写其put和get方法,以支持对类型为A[0].B及A.B的键值的读取和指定

3.以上6中情况在实际开发中可能有些不存在或不常用

存在的问题:

1.使用XMLSerializer的write方法生成的xml字符串的中文乱码问题

2.question4中的红色的log日志问题

以上内容是小编给大家介绍的JSONObject使用方法详解,希望大家喜欢。

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.