아하
생활

생활꿀팁

기민한진도개272
기민한진도개272

url json 파싱하는데 에러

안녕하세요


url에 있는 json을 가져와서 페이지에 띄울려고 합니다.


import java.io.IOException;

import java.io.InputStreamReader;

import java.net.URL;

import org.json.simple.JSONValue;

import org.json.simple.JSONArray;

import org.json.simple.JSONObject; // JSON객체를 만드는데 사용

import org.json.simple.parser.ParseException; //예외처리


public static void main(String[] args) throws IOException, ParseException {

URL url = new URL("hsas");

InputStreamReader isr = new InputStreamReader(url.openConnection().getInputStream(), "UTF-8");

JSONObject object = (JSONObject)JSONValue.parse(isr);


이렇게 하면


Exception in thread "main" java.lang.ClassCastException: org.json.simple.JSONArray cannot be cast to org.json.simple.JSONObject


이 오류가 뜹니다.


왜그러까요?



http://javastudy.tistory.com/80 참고했습니다.

    55글자 더 채워주세요.
    2개의 답변이 있어요!
    • 조용한오징어158
      조용한오징어158

      안녕하세요.

      에러 코드에 나와있는대로 JsonArray 형태를 JsonObject 형태로 캐스팅을 하려 해서 생긴 오류입니다.

      import java.net.*;
      import java.io.*;

      public class ReadDataFromURL {

      public static void main(String[] args) throws IOException {
      if (args.length == 0) {
      System.out.println("java ReadDataFromURL URL");
      System.exit(0);
      }
      URL url = new URL(args[0]);
      URLConnection conn = url.openConnection();
      InputStream is = conn.getInputStream();
      BufferedReader br = new BufferedReader(new InputStreamReader(is));
      char[] buff = new char[512];
      int len = -1;

      while( (len = br.read(buff)) != -1) {
      System.out.print(new String(buff, 0, len));
      }

      br.close();
      }
      }

      만약 저 Array 형태를 사용하고 싶다면 받은 데이터를 반복문으로 출력을 해주시면 됩니다.

      그게 아니면

      https://stackoverflow.com/questions/18440098/org-json-simple-jsonarray-cannot-be-cast-to-org-json-simple-jsonobject

      이런 식으로 처리해주면 작업이 가능해지겠네요.

      도움이 되셨길 바랍니다.

    • 일단 jsonarray로 받아온것을 jsonobject로 바꾸려고하는게 안된다고 나온거네요

      InputStreamReader isr = (JSONObject)jsonParser.parse(new InputStreamReader(url.openConnection().getInputStream(), "UTF-8"));

      한번테스트해보시겠어요?