JSON 문자열을 Java 객체로 변환하는 데 많은 도구가 있습니다.
코드 사본은 다음과 같습니다.
java.util.arraylist 가져 오기;
java.util.hashmap import;
Java.util.list 가져 오기;
java.util.map import;
import com.jfinal.kit.jsonkit;
공개 클래스 jsontojavaobject {
public static void main (String [] args) {
Object o1 = 구문 분석 ( "{/"aa/": 123, cc : [1,2,3,4, {cd : f, bb : 234}}");
System.out.println (jsonkit.tojson (O1));
}
공개 정적 객체 구문 분석 (String JSON) {
if (json == null) {
널 리턴;
}
json = json.trim ();
if ( "String".Equals (typeof (json))) {
json 리턴;
}
if ( "map".equals (typeof (json))) {
Parsemap 리턴 (JSON);
}
if ( "list".equals (typeof (json))) {
반환 파셀리스트 (JSON);
}
널 리턴;
}
공개 정적 맵 파시 맵 (String JSON) {
if (! "map".equals (typeof (json))) {
새로운 runtimeexception을 던지십시오 ( "JSON은 맵 유형이 아닙니다");
}
지도 r = new Hashmap ();
parsetoken (R, JSON, NULL);
RETOR R;
}
공개 정적 목록 Parselist (String Json) {
if (! "list".equals (typeof (json))) {
새로운 runtimeexception을 던지십시오 ( "JSON은 목록 유형이 아닙니다");
}
목록 r = new arrayList ();
parsetoken (null, json, r);
RETOR R;
}
공개 정적 문자열 유형 (String JSON) {
if (json.length () == 0) "String"을 반환합니다.
if ( '{'== json.charat (0)) {
if ( '}'== json.charat (json.length () -1)) {
"지도"를 반환합니다.
}
}
if ( '['== json.charat (0)) {
if ( ']'== json.charat (json.length () -1)) {
"목록"을 반환합니다.
}
}
"문자열"을 반환합니다.
}
Private STATIC VOID PARSETOKN (MAP R, String JSON, List R2) {
부울 syh = true; // 이중 인용문
부울 dyh = true; // 단일 따옴표
부울 dkh = true; // 괄호
부울 zkh = true; // 괄호
부울 iskey = true;
StringBuffer key = new StringBuffer ();
StringBuffer value = new StringBuffer ();
for (int i = 1; i <json.length () -1; i ++) {
숯 항목 = json.charat (i);
if (dyh && syh && zkh) if ( '{'== item || '}'== item) {
dkh =! dkh;
}
if (dyh && syh && dkh) if ( '['== item || ']'== item) {
zkh =! zkh;
}
if (dyh && dkh && zkh) if ( ' "'== item) {
Syh =! Syh;
계속하다;
}
if (syh && dkh && zkh) if (syh) if ( '/' '== item) {
dyh =! dyh;
계속하다;
}
if (dyh && syh && dkh & zkh) if (r2 == null) if (dyh) if ( ':'== item) {
iskey = 거짓;
계속하다;
}
if (dyh && syh && dkh & zkh) if ( ','== item) {
iskey = true;
if (r! = null) {
r.put (key.toString (), parse (value.toString ());
}
if (r2! = null) {
r2.add (parse (key.toString ());
}
key = new StringBuffer ();
value = new StringBuffer ();
계속하다;
}
if (iskey) {
key.append (항목);
}또 다른{
value.append (항목);
}
}
if (! key.toString (). trim (). Equals ( "")) {
if (r! = null) {
if (value.toString (). trim (). equals ( "")) 던지기 new runtimeexception ( "JSON 형식 오류");
r.put (key.tostring (), parse (value.toString ());
}
if (r2! = null) {
r2.add (parse (key.toString ());
}
}
}
}
콘솔 출력
코드 사본은 다음과 같습니다.
{ "AA": "123", "CC": [ "1", "2", "3", "4", { "BB": "234", "CD": "F"}]}