머리말
JSON은 JavaScript 객체 표기법, 가벼운 형태의 데이터 교환, XML의 대안 인 JavaScript 객체 표기법의 약어이며 XML보다 작고 빠르며 구문 분석하기가 쉽습니다. JSON은 객체를 설명 할 때 JavaScript 구문을 사용하기 때문에 언어 및 플랫폼 독립적이며 많은 JSON 파서 및 클래스 라이브러리가 수년에 걸쳐 개발되었습니다.
JSON에는 다음과 같은 형식이 있습니다.
객체는 "이름/값 '쌍'"의 변환되지 않은 컬렉션입니다. 물체는 "{"(열린 브래킷)으로 시작하여 "} (닫기)으로 끝납니다. 각 "이름"뒤에 ":"(콜론); " '이름/값'쌍"은 "(comma)로 분리됩니다.
주문한 값 목록. 대부분의 언어에서는 배열, 벡터, 목록, 시퀀스로 구현됩니다.
이들은 일반적인 데이터 구조입니다. 현재 대부분의 프로그래밍 언어는 어떤 형태로도 지원합니다. 따라서 다양한 프로그래밍 언어간에 동일한 형식으로 데이터를 교환 할 수 있습니다.
다른 서버의 URL에서 데이터를 얻기 위해 일반적으로 JSON 데이터를 전송합니다. 예를 들어, 서버 B는 서버 A의 URL에서 페이징 정보를 얻어야합니다.
여기서는 Google Gson을 변환하기 위해 3 개의 타사 JSON을 시도했습니다. 이것은 성공적으로 변환 할 수없는 것 같습니다. JSON 형식 오류를 계속보고하지만 확인이 정확하고 시도가 실패했습니다. 두 번째 유형은 net.sf.json입니다. 이는 오류가보고되지 않았지만 물체의 값은 항상 비어 있습니다. JSON-SOMPLE만이 객체를 성공적으로 변환 할 수 있습니다
PARSE JSON
우선, JSON이 표준 JSON 형식인지 확인하기 위해 JSON을 구문 분석해야합니다. 인터넷에서 많은 온라인 형식으로 JSON을 볼 수 있습니다. 일반적으로 우리는 JSON을 물체로 구문 분석 할 때 약이 아니라 수프를 바꿉니다.
첫 번째 : JSON 구조를 알아야합니다. 여기서 서버 A를 시작하고 URL에서 일련의 JSON 데이터를 얻을 것입니다.
사본 JSON 데이터를 서식 도구에 던지면 구조를 명확하게 볼 수 있습니다.
{ "eventList": [{ "id": 1030, "eventId": "1508779115818499700", "CreateTime": 1508779115000, "endtime": 1508865480000, "EventContent": "123", "openid": "o4ewz06xzhw6MC" }, { "id": 1029, "eventId": "1508382907251660498", "CreateTime": 1508382906000, "endtime": 1508383020000, "EventContent": "ahhhhh", "OpenID": "o4ewz06xzhw6MC2GMDETX": "eventContent": "EventContent" }, { "id": 1028, "eventId": "1508308708414580378", "CreateTime": 1508308721000, "endtime": 1508309040000, "EventContent": "30", "openID": "a4ewz06xzhw6mc2gmzmzmz mzeteteteteteteted" "ID": "1027,"EventId ":"150830846333064814 ","CreateTime ":"EndTime ":"EndTime ": 1508308560000,"EventContent ":"28 ","openID ":"O4EWZ06XZHW6MC2GMZVDETX1ZK "} : 1026, "eventId": "1508308463017144213", "CreateTime": 1508308479000, "endtime": 1508308560000, "EventContent": "27", "OpenID": "O4ewZ06XZHW6MMC2GMZMZVDETX1ZK" "", ""1 "" ""1 " "5", "ishaspage": "1"}둘째 : 구조에 따라 해당 엔티티 클래스를 만듭니다
import com.yhn.consumer.entity.event; import lombok.data; import org.json.simple.jsonobject; import java.io.serializable; import java.util.list; @datapublic class eventvo는 시리얼 리화 가능 {private list <event> eventlist; 개인 문자열 페이지; 개인 문자열 크기; 개인 문자열 ishaspage; public eventVo (jsonObject Object) {// 생성자 메소드 객체 eventList = (list <Event>)에 값을 할당합니다. 객체 ( "eventList"); page = (string) object.get ( "page"); size = (string) object.get ( "size"); ishaspage = (string) object.get ( "ishaspage"); }} 내장 구조이기 때문에 다음은 private List<Event> eventList 의 이벤트 클래스입니다.
import lombok.Data;import org.hibernate.annotations.DynamicUpdate;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.Id;import java.io.Serializable;import java.util.Date;@Entity@Data@DynamicUpdate //Automatic update time field public class Event implements Serializable {// eventVo @id @generatedValue 개인 정수 ID의 목록의 이벤트입니다. // 함수 분류 개인 문자열 eventId; // 이벤트 ID 개인 날짜 CreateTime; // 생성 시간 개인 날짜 종료 시간; // 업데이트 시간 개인 문자열 eventContent; // 이벤트 내용을 상기시켜 개인 문자열 OpenID; // 사용자 ID} 테스트 클래스
다음으로 구조도 쓰여졌습니다. 서버 B에 단위 테스트를 작성하여 값을 성공적으로 할당 할 수 있는지 확인합니다.
@test public void clientDemo ()는 예외를 던지려면 {stringBuilder json = new StringBuilder (); url urlobject = new URL ( "http://127.0.0.1/meetingsign/test/server?openid=o4ewz06xzhw6mc2gmzmyvdetx1zk&page=2&size=5"); // URL 지정 httpurlConnection uc = (httpurlConnection) urlobject .openConnection (); // Connection BufferedReader in = new BufferedReader (new InputStreamReader (uc.getInputStream (), "UTF-8")); 문자열 inputline = null; while ((inputline = in.readline ())! = null) {json.append (inputline); // split Json} in.close (); uc.disconnect (); System.out.println (JSON); // 당신이 그것을 얻는 지 확인하십시오. // 가능한 UTF-8 등을 제거하십시오. BOM 헤더 파일이 포함될 수 있습니다. 문자열 result = formatstring (json.tostring ()); JSONPARSER PARSER = NEW JSONPARSER (); org.json.simple.jsonobject data = new org.json.simple.jsonobject (); data = (org.json.simple.jsonobject) parser.parse (결과); EventVo EventVo = 새로운 EventVo (데이터); // 값을 log.info로 전달합니다 ( "eventVo = {}", eventVo); }/*** 폭탄 헤더 제거*/public static String formatstring (String s) {if (s! = null) {s = s.replaceall ( "/ufeff", ""); } 반환 s; } 테스트 결과
객체에 값이 할당됩니다
요약
위는이 기사의 전체 내용입니다. 이 기사의 내용에 모든 사람의 연구 나 작업에 대한 특정 참조 가치가 있기를 바랍니다. 궁금한 점이 있으면 의사 소통을 위해 메시지를 남길 수 있습니다. Wulin.com을 지원 해주셔서 감사합니다.