JSON과 객체, 컬렉션 간 변환의 예
개발 과정에서 다른 시스템과 데이터를 자주 교환해야 한다. 데이터 교환의 형식은 XML, JSON 등이 있다. JSON은 경량급 데이터 형식으로서 xml보다 효율이 높고 XML은 많은 라벨을 필요로 한다. 이것은 의심할 여지없이 네트워크 데이터를 차지한다. JSON은 이 방면에서 매우 잘한다. 다음은 JSON의 형식을 먼저 보자.
JSON은 두 가지 형식을 가질 수 있습니다. 하나는 대상 형식이고, 다른 하나는 그룹 대상입니다.
{"name":"JSON","address":" ","age":25}//JSON
[{"name":"JSON","address":" ","age":25}]//
위의 두 가지 형식에서 볼 수 있듯이 대상 형식과 수조 대상 형식의 유일한 차이는 대상 형식을 바탕으로 []를 추가한 것이다. 그리고 구체적인 구조를 보면 모두 키 값이 맞는 형식으로 나타나고 중간은 영문 상태의 쉼표(,)로 구분된다.프론트와 백엔드에서 데이터 전송을 할 때 이런 형식도 인기가 있습니다. 백엔드에서 json 형식의 문자열을 되돌려주고 프론트에서 js의 JSON을 사용합니다.parse() 방법은 JSON 문자열을 json 대상으로 해석한 다음 앞부분을 훑어보도록 합니다.
다음은 본론으로 들어가 JAVA에서 JSON과 자바 대상 간의 상호작용을 소개한다.
JSON과 자바 대상 간의 상호작용을 실현하려면 제3자 자바 패키지를 빌려야 한다. 여기서 json-lib라는 자바 패키지를 사용한다. 다운로드 주소는 https://sourceforge.net/projects/json-lib/, json-lib는commons-beanutils-1.8.0이 필요하다.jar、commons-collections-3.2.1.jar、commons-lang-2.5.jar、commons-logging-1.1.1.jar、ezmorph-1.0.6.jar 다섯 개의 패키지 지원은 인터넷에서 다운로드할 수 있으며, 여기에 다운로드 주소를 더 이상 붙이지 않습니다.
json-lib는 이 기능을 완성할 수 있는 몇 가지 종류를 제공합니다. 예를 들어 JSON Object, JSON Array입니다.클래스의 이름에서 알 수 있듯이 JSON Object는 대상 형식이어야 하고 JSON Array는 수조 대상(즉 [] 형식)을 가져야 한다.
1. 자바 일반 대상과 json 문자열의 상호작용
java 객체 -- 문자열
자바 일반 대상은 자바 중의 자바 bean, 즉 실체류를 가리킨다. 예를 들어
package com.cn.study.day3;
public class Student {
//
private String name;
//
private String age;
//
private String address;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + ", address="
+ address + "]";
}
}
위쪽은 저의 일반적인 자바 실체류입니다. json-lib가 어떻게 문자열 형식으로 바꾸는지 보십시오.
public static void convertObject() {
Student stu=new Student();
stu.setName("JSON");
stu.setAge("23");
stu.setAddress(" ");
//1、 JSONObject
JSONObject json = JSONObject.fromObject(stu);
//2、 JSONArray
JSONArray array=JSONArray.fromObject(stu);
String strJson=json.toString();
String strArray=array.toString();
System.out.println("strJson:"+strJson);
System.out.println("strArray:"+strArray);
}
저는 Student의 실체 클래스를 정의한 다음에 각각 JSON Object와 JSON Array 두 가지 방식을 사용하여 JSON 문자열로 전환했습니다. 다음은 인쇄된 결과를 보십시오.
strJson:{"address":" ","age":"23","name":"JSON"}
strArray:[{"address":" ","age":"23","name":"JSON"}]
결과에서 알 수 있듯이 두 가지 방법은 모두 자바 대상을 JSON 문자열로 바꿀 수 있지만 전환 후의 구조가 다르다.JSON 문자열 -- 자바 객체
위에서 자바 대상을 어떻게 JSON 문자열로 바꾸는지, 다음은 어떻게 JSON 문자열 형식을 자바 대상으로 바꾸는지,
우선 두 가지 다른 형식의 문자열을 정의해야 합니다.\큰따옴표를 사용하여 뜻을 바꾸어야 합니다.
public static void jsonStrToJava(){
//
String objectStr="{\"name\":\"JSON\",\"age\":\"24\",\"address\":\" \"}";
String arrayStr="[{\"name\":\"JSON\",\"age\":\"24\",\"address\":\" \"}]";
//1、 JSONObject
JSONObject jsonObject=JSONObject.fromObject(objectStr);
Student stu=(Student)JSONObject.toBean(jsonObject, Student.class);
//2、 JSONArray
JSONArray jsonArray=JSONArray.fromObject(arrayStr);
// jsonArray
Object o=jsonArray.get(0);
JSONObject jsonObject2=JSONObject.fromObject(o);
Student stu2=(Student)JSONObject.toBean(jsonObject2, Student.class);
System.out.println("stu:"+stu);
System.out.println("stu2:"+stu2);
}
인쇄 결과:
stu:Student [name=JSON, age=24, address= ]
stu2:Student [name=JSON, age=24, address= ]
위의 코드에서 알 수 있듯이 JSON Object를 사용하면 JSON 형식의 문자열을 자바 대상으로 쉽게 바꿀 수 있지만 JSON Array를 사용하는 것은 쉽지 않다. 왜냐하면 "[]"기호가 있기 때문에 우리는 JSON Array의 대상을 얻은 후에 그 첫 번째 요소인 우리가 필요로 하는 학생의 변형을 취하고 JSON Object를 사용하여 쉽게 얻을 수 있다.2,list와 json 문자열의 상호작용
list--> json 문자열
public static void listToJSON(){
Student stu=new Student();
stu.setName("JSON");
stu.setAge("23");
stu.setAddress(" ");
List<Student> lists=new ArrayList<Student>();
lists.add(stu);
//1、 JSONObject
//JSONObject listObject=JSONObject.fromObject(lists);
//2、 JSONArray
JSONArray listArray=JSONArray.fromObject(lists);
//System.out.println("listObject:"+listObject.toString());
System.out.println("listArray:"+listArray.toString());
}
JSON Object를 사용하는 방식을 주석에 넣었습니다. 주석을 남기기 전의 결과를 보겠습니다.Exception in thread "main"net.sf.json.JSONException: 'object' is an array. Use JSONArray instead
이상하다고 알려주세요. 원본 코드를 보면 fromObject 방법을 사용할 때 매개 변수 유형의 판단을 먼저 합니다. 여기에 전달된 매개 변수는array 유형입니다. 왜냐하면 사용된 Array List이기 때문에 주석 이후의 결과를 보면
listArray:[{"address":" ","age":"23","name":"JSON"}]
이렇게 하면 결과는 정상이다.json 문자열-->list
위의 예에서 알 수 있듯이list의 대상은 수조 대상의 형식으로만 바뀔 수 있다. 그러면 우리는 아래의 문자열에서list로의 전환을 본다.
public static void jsonToList(){
String arrayStr="[{\"name\":\"JSON\",\"age\":\"24\",\"address\":\" \"}]";
// list
List<Student> list2=(List<Student>)JSONArray.toList(JSONArray.fromObject(arrayStr), Student.class);
for (Student stu : list2) {
System.out.println(stu);
}
//
Student[] ss =(Student[])JSONArray.toArray(JSONArray.fromObject(arrayStr),Student.class);
for (Student student : ss) {
System.out.println(student);
}
}
인쇄 결과,
Student [name=JSON, age=24, address= ]
Student [name=JSON, age=24, address= ]
문자열의 형식은 "[]"형식이 있기 때문에 JSON Array라는 대상을 선택하십시오. 이것은 to Array, to List 방법으로 사용할 수 있습니다. 전자는 자바의 수조로 전환하거나 자바의list로 전환됩니다. 여기에 실체류가 대응하기 때문에 사용할 때 일반적인 형식 (Student.class) 을 지정하면 전환된 대상을 얻을 수 있습니다.3. 맵과 json 문자열의 상호작용
map-> json 문자열
public static void mapToJSON(){
Student stu=new Student();
stu.setName("JSON");
stu.setAge("23");
stu.setAddress(" ");
Map<String,Student> map=new HashMap<String,Student>();
map.put("first", stu);
//1、JSONObject
JSONObject mapObject=JSONObject.fromObject(map);
System.out.println("mapObject"+mapObject.toString());
//2、JSONArray
JSONArray mapArray=JSONArray.fromObject(map);
System.out.println("mapArray:"+mapArray.toString());
}
인쇄 결과,
mapObject{"first":{"address":" ","age":"23","name":"JSON"}}
mapArray:[{"first":{"address":" ","age":"23","name":"JSON"}}]
위에 두 가지 형식을 인쇄했다.json 문자열 -- 맵
JSON 문자열은 맵 대상으로 직접 전환할 수 없습니다. 맵의 키에 대응하는 값을 얻으려면 다른 방법이 필요합니다.
public static void jsonToMap(){
String strObject="{\"first\":{\"address\":\" \",\"age\":\"23\",\"name\":\"JSON\"}}";
//JSONObject
JSONObject jsonObject=JSONObject.fromObject(strObject);
Map map=new HashMap();
map.put("first", Student.class);
// toBean ,
MyBean my=(MyBean)JSONObject.toBean(jsonObject, MyBean.class, map);
System.out.println(my.getFirst());
}
인쇄 결과,
Student [name=JSON, age=23, address= ]
다음은 마이빈의 코드,
package com.cn.study.day4;
import java.util.Map;
import com.cn.study.day3.Student;
public class MyBean {
private Student first;
public Student getFirst() {
return first;
}
public void setFirst(Student first) {
this.first = first;
}
}
toBean() 메서드를 사용하면 세 개의 매개 변수가 전송됩니다. 첫 번째는 JSON Object 대상, 두 번째는 MyBean입니다.class, 세 번째는 맵 대상입니다.마이빈을 통해 알 수 있듯이 이 중 하나는first의 속성이 있고 그 유형은 Student이며 맵의 키와 값 형식, 즉,first 대응 키first 형식에 대응하는 값 형식입니다.이상은 본문의 전체 내용입니다. 여러분의 학습에 도움이 되고 저희를 많이 응원해 주십시오.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
38. Java의 Leetcode 솔루션텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.