자바 에서 JSONobject 와 JSONarray 의 사용

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);
}

좋은 웹페이지 즐겨찾기