자바 에서 JSONobject 와 JSONarray 의 사용
최근 학습 과정 에서 약간 복잡 한 제 이 슨 데 이 터 를 사 용 했 습 니 다. 제 이 슨 데 이 터 를 분석 해 야 합 니 다. 여기 서 일부분 을 캡 처 하여 예 로 들 겠 습 니 다.
1. JSONobject 소개
JSONobject - lib 패 키 지 는 beans, collections, maps, 자바 arrays 와 xml, JSON 이 서로 전환 하 는 패키지 입 니 다.
2. jar 패키지 다운로드
http://files.cnblogs.com/java-pan/lib.rar
* 또는 Maven 의 pom. xml 파일 에 다음 과 같이 직접 설정 합 니 다.
net.sf.json-lib
json-lib
2.4
jdk15
json 데이터:
{
"cartypes":[
{"id":1,"imgUrl":"img/l.jpg","bigimg": "img/d.jpg","title":" ","marketprice":"15.29","periods":"12",
"endrepayone":"96800","endrepaytwo":"96800","endrepaythree":"93000",
"endmonthone":"3408","endmonthtwo":"3408","endmonththree":"3278",
"repayfirst":"15290","repaytwo":"22935", "repaythree":"30580",
"monthrepayone":"3578","monthrepaytwo":"2878","monthrepaythree":"2478",
"cardetails":
[{
"imageId00": "img/first-bkwl.jpg",
"imageId01": "img/bkwl01.jpg",
"imageId02": "img/bkwl02.jpg",
"imageId03": "img/bkwl03.jpg",
"imageId04": "img/bkwl04.jpg",
"carname": " ",
"carmatter": " ",
"carvolume":"1.5L",
"sitnum":"5",
"cargearbox":"6 ",
"caremission":" V",
"carldone":" ",
"carldtwo":" ",
"carldthree":" ",
"carldfour":" HID "
}]
},
{"id":2,"imgUrl":"img/l.jpg","bigimg": "img/d.jpg","title":" ","marketprice":"18.98","periods":"12",
"endrepayone":"126800","endrepaytwo":"126800","endrepaythree":"126800",
"endmonthone":"4458","endmonthtwo":"4458","endmonththree":"4458",
"repayfirst":"18980","repaytwo":"28470", "repaythree":"37960",
"monthrepayone":"2738","monthrepaytwo":"1878","monthrepaythree":"998",
"cardetails":
[{
"imageId00": "img/first.jpg",
"imageId01": "img/yfnd01.jpg",
"imageId02": "img/yfnd02.jpg",
"imageId03": "img/yfnd03.jpg",
"imageId04": "img/yfnd04.jpg",
"carname": " ",
"carmatter": "ESQ",
"carvolume":"1.6L",
"sitnum":"5",
"cargearbox":"CVT ",
"caremission":" V",
"carldone":" ",
"carldtwo":" ",
"carldthree":"LED ",
"carldfour":" "
}]
}
]
}
위의 json 데 이 터 를 받 아들 일 때 키 에 해당 하 는 값 을 가 져 오 려 면 어떻게 해 야 합 니까? 예 를 들 어 title 의 값 을 가 져 오 려 면 cardetails 의 imageId 02 값 을 가 져 오 는 등 입 니 다.
이러한 배열 과 대상 이 서로 포 함 된 상황 에 직면 하여 한 걸음 한 걸음 데 이 터 를 분리 해 야 한다. 주요 사상 은 키 에 따라 값 을 추출 하 는 것 이 고 배열 유형 에 대해 서 는 '아래 표' 에 따라 요 소 를 추출 해 야 한다.JSONobject 와 JSONarray 도 필요 합 니 다.
위의 제 이 슨 데 이 터 를 간소화 하 는 것 은 다음 과 같다.
{
"cartypes":[
{
"id":1,"bigimg": "img/dt-bkwl.jpg",
"cardetails": [{ "imageId02": "img/bkwl02.jpg}]
}
{
"id":2,"bigimg": "img/xxx.jpg",
"cardetails":[{"imageId002":"img/xx.jpg"}]
}
]
}
이것 이 바로 간단 한 제 이 슨 데이터 입 니 다. 이 문자열 의 가장 바깥쪽 은 큰 키 가 cartypes 의 대상 이 고 그 값 은 제 이 슨 배열 형식의 비교적 복잡 한 제 이 슨 데이터 임 을 알 수 있 습 니 다.[] 의 부분 을 계속 분석 하면 알 수 있 듯 이 그 안에 두 개의 배열 요소 가 있 습 니 다. 각 요 소 는 각각 {} 에 포 함 된 json 대상 입 니 다. 그들의 요 소 는 구성 이 같 습 니 다. 각 요소 에 몇 개의 키 가 맞 는 데 이 터 를 포함 하고 있 습 니 다. 그 중에서 cardetails 의 값 은 또 하나의 포 함 된 json 배열 입 니 다. 그 안에 json 대상 이 포함 되 어 있 습 니 다.분석 완료.그럼 어떻게 해 야 분석 할 수 있 습 니까?
JSONobject 와 JSONARray 사용 하기
일반적으로 데 이 터 를 얻 는 데 는 두 가지 방식 이 있 는데, 보기에 선택 이 필요 하 다.
방식 ①:
JSONobject. getString ("키") 을 통 해 직접 가 져 옵 니 다. 이 방식 은 매번 하나만 가 져 올 수 있 습 니 다.
방식 ②
json 대상 에 해당 하 는 bean 구축 을 통 해 얻 을 수 있 습 니 다.
저 는 위의 예 를 쓸 때 두 가지 방식 을 사 용 했 습 니 다. id, bigimg, cardetails 의 대부분 데 이 터 를 사용 해 야 하기 때문에 저 는 사용 할 때 cardetails 를 하나의 bean 으로 포장 하여 사용 하기에 편리 하고 다른 것 은 비교적 적 기 때문에 키 에 따라 값 을 직접 얻 었 습 니 다.
또 주의해 야 할 것 은 JSONobject, JSONarray 가 각각 json 데이터 의 두 가지 형식 에 대응 한 다 는 점 이다.즉 {"장삼": "남"} , [{ 장삼 : " 남자 }] ,사용 시 대응 하 는 대상 으로 변환 해 야 합 니 다.
예 를 들 어 (예시):
JSONObject jsonObject = JSONObject.fromObject(json); // json JSONObject
JSONArray jsonArray = JSONArray.fromObject(json); // json JSONArray
또 하 나 는 키 값 을 얻 는 데 있어 서 키 값 에 따라 항상 값 을 추출 해 야 하 며, 밖에서 안 으로, 안쪽 키 의 값 을 얻 으 려 면 먼저 바깥쪽 키 의 값 을 가 져 와 야 하 며, 값 을 뛰 어 넘 으 면 오 류 를 보고 할 수 있다 는 점 을 지적 해 야 한다.
다음 데모 값:
JSONObject jsonObject = JSONObject.fromObject(json); // json JSONObject
String cartypes=jsonObject.getString("cartypes"); // getString("cartypes")
JSONArray jsonArray = JSONArray.fromObject(cartypes); // cartypes ( ) JSONArray
String id= job.getString("id"); // id
String bigImg = job.getString("bigimg"); //
System.out.println("bigImg:"+bigImg); // bigimg
cardetails 의 기본 값 은 모두 필요 한 값 이기 때문에 하나의 값 을 추출 하 는 것 이 비교적 번 거 롭 기 때문에 cardetails 를 하나의 bean 으로 밀봉 합 니 다. 다음 과 같다.
Cardetails.java
public class Cardetails {
private String imageId00;
private String imageId01;
private String imageId02;
private String imageId03;
private String imageId04;
private String carname;
private String carmatter;
private String carvolume;
private int sitnum;
private String cargearbox;
private String caremission;
private String carldone;
private String carldtwo;
private String carldthree;
private String carldfour;
//get set toString
}
여기 서 cardetails 의 키 를 모두 Cardetails 의 속성 으로 바 꿔 야 합 니 다. 방법 은 다음 과 같 습 니 다.
// cardetail bean
JSONArray carDetailArr=job.getJSONArray("cardetails");// json JSONArray
JSONObject carDetailObj = carDetailArr.getJSONObject(0);//
Cardetails cardetails = (Cardetails) JSONObject.toBean(carDetailObj, Cardetails.class);// bean
System.out.println("cardetails:"+cardetails); //
마지막 부분 코드 첨부:
public void getICarDetail(int id){
String json=null;
try {
json=iCarDetail.getICarDetail(id);// json
} catch (Exception e) {
e.printStackTrace();
}
int jsonId=0;//json id
JSONObject jsonObject = JSONObject.fromObject(json); // json JSONObject
String cartypes=jsonObject.getString("cartypes");// getString("cartypes")
JSONArray jsonArray = JSONArray.fromObject(cartypes); // cartypes ( ) JSONArray
// jsonarray
if(jsonArray.size()>0){
for(int i=0;i){
JSONObject job = jsonArray.getJSONObject(i);// json
jsonId=(int)job.get("id"); // id
if(jsonId==id){
//
String title = job.getString("title");
String bigImg = job.getString("bigimg");
String repayFirst = job.getString("repayfirst");
String endrepayone = job.getString("endrepayone");
String endmonthone = job.getString("endmonthone");
String marketprice = job.getString("marketprice");
// cardetail bean
JSONArray carDetailArr=job.getJSONArray("cardetails");// json JSONArray
JSONObject carDetailObj = carDetailArr.getJSONObject(0);//
Cardetails cardetails = (Cardetails) JSONObject.toBean(carDetailObj, Cardetails.class);// bean
//
System.out.println("******************");
System.out.println("jsonId:"+jsonId);
System.out.println("title:"+title);
System.out.println("bigImg:"+bigImg);
System.out.println("repayFirst:"+repayFirst);
System.out.println("endrepayone:"+endrepayone);
System.out.println("endmonthone:"+endmonthone);
System.out.println("marketprice:"+marketprice);
System.out.println("cardetails:"+cardetails);
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.