728x90

JSON

= JavaScript Object Notation

JSON은 좀 더 쉽게 데이터를 교환하고 저장하기 위하여 만들어진 텍스트 기반의 데이터 교환 표준

​이러한 JSON은 XML의 대안으로서 좀 더 쉽게 데이터를 교환하고 저장하기 위하여 고안됨

또한, JSON은 텍스트 기반이므로 어떠한 프로그래밍 언어에서도 JSON 데이터를 읽고 사용이 가능

 

특징

  • JS를 확장하여 만들어짐
  • JS 객체 표기법을 팔로우함
  • 사람과 기계가 모두 읽기 편하게
  • 프로그래밍 언너와 운영체제가 독립적

XML을 쓰지않고 JSON을 쓰는이유

객체 표현
String str="홍길동,서울,010-1111-1111#김길동,서울,010-2222-2222"

xml파일형식 ) <name>홍길동</name>
      <addr>
      <tel>

처리는 쉬우나 용량이 커짐

그래서 나온것이 JSON

json) [{'name':'홍길동','addr':'seoul', 'tel':'...'}]
gson

cf) JSON은 주석을 사용하지 않음!

 

 

기본구조

package kr.bit;

public class FoodDTO {
    private String name;
    private int price;
    private String rest;

    public FoodDTO() {}
    public FoodDTO(String name, int price, String rest){
        this.name=name;
        this.price=price;
        this.rest=rest;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getPrice() {
        return price;
    }

    public void setPrice(int price) {
        this.price = price;
    }

    public String getRest() {
        return rest;
    }

    public void setRest(String rest) {
        this.rest = rest;
    }
    @Override
    public String toString(){
        return "FoodDTO[name=" +name+ ", price=" +price+ ", rest=" +rest+ "]";
    }
}

 

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import kr.bit.FoodDTO;

import java.util.ArrayList;
import java.util.List;

public class test {

    public static void main(String[] args) {
        new test();

        // object => json(String)
        FoodDTO dto = new FoodDTO("김밥", 7000, "a");
        Gson g = new Gson();
        String str = g.toJson(dto);
        System.out.println(str);

        // json => object(java)
        FoodDTO dto1 = g.fromJson(str, FoodDTO.class);
        System.out.println(dto1);


        System.out.println(dto1.getName());
        System.out.println(dto1.getPrice());
        System.out.println(dto1.getRest());

        List<FoodDTO> li = new ArrayList<FoodDTO>();
        li.add(new FoodDTO("김밥", 7000, "a"));
        li.add(new FoodDTO("우동", 8000, "b"));
        li.add(new FoodDTO("라면", 8000, "c"));

        String str2 = g.toJson(li);
        System.out.println(str2);

        //json => list 객체
        List<FoodDTO> li2 = g.fromJson(str2, new TypeToken<List<FoodDTO>>() {
        }.getType());

        for (FoodDTO fo : li2) {
            System.out.println(fo);
        }


        //json : [{aaa:123}, {bb:344}];
        //gson : java객체를 json으로 변환
        //      json을 java객체로 변환


    }
}

 

 

Insert JsonObject in JsonArray 

import org.json.JSONArray;
import org.json.JSONObject;

public class test2 {

    public static void main(String[] args) {
        JSONArray stu=new JSONArray(); // json이 들어있는 배열
        JSONObject stu2 = new JSONObject();

        stu2.put("name","홍길동");
        stu2.put("tel","010-1111-2222");
        stu2.put("adderess","seoul");
        System.out.println(stu2);
        stu.put(stu2);
        System.out.println(stu);

    }
}

 

 

JSON 파일 참조해서 GSON 

package kr.bit;

import org.json.JSONArray;
import org.json.JSONObject;
import org.json.JSONTokener;

import java.io.InputStream;

public class test3 {
    public static void main(String[] args) {
        String str="inform.json";
        InputStream is = test3.class.getResourceAsStream(str);
        if(is==null){
            throw new NullPointerException("cannot find file");
        }
        JSONTokener to = new JSONTokener(is);
        JSONObject ob = new JSONObject(to);
        JSONArray  arr= ob.getJSONArray("student");
        System.out.println(arr);

        for(int i = 0; i<arr.length(); i++){
            JSONObject stu= (JSONObject) arr.get(i);
            System.out.println(stu.get("name")+"\t");
            System.out.println(stu.get("address")+"\t");
            System.out.println(stu.get("phone")+"\t");

        }
    }
}
{"student":[
  {
    "address":"seoul",

    "phone": "010-1111-2222",

    "name":"hong"
  },
  {
    "address": "busan",

    "phone":"010-6666-8777",

    "name":"kim"
  }
]}

 

728x90

+ Recent posts