마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

retrofit을 사용하여 restAPI값을 가져오고자 시도하지만 정작 null값이 계속해서 리턴됩니다. 도와주세요!!

0 추천

코드는 밑에와 같이 구성하였습니다.

rest API는 밑의 형식으로 제공되고 있습니다.

-> 분명 제공되는 restAPI 형식에 맞게 retrofit을 구성한 것 같은데 정작 실행을 하면 값이 비어있다면서 null값이 출력됩니다. 왜 이런것인지, 어느 부분의 코드를 고쳐야되는지 알고 싶습니다. 도와주세요 ㅜ

 *null값 출력됨

 

 

 

 

*수정 후

retrofit 데이터형식을 변형한 후 통신은 제대로 되지만 'Expected name at line 1 column 546 path $.response..[0].' 에러 메시지가 뜹니다. 이러한 경우는 뭐가 문제이며 어떻게 해결하면 되나요? 

<새로 생긴 에러메시지>

 

<postman에서 테스트 해본 샘플 응답 데이터를 볼 수 있는 링크입니다.>

api.data.go.kr/openapi/tn_pubr_public_cltur_fstvl_api?serviceKey=flqNpXIymv5sUe63nK6VOIcPpe4Gjh3ms%2FuIsRg9nYrtrsoRAzNWiBCGzxczHzbgNa0PSOgF3ROfJZYDaqybfA%3D%3D&pageNo=0&numOfRows=100&type=json

안드11 (330 포인트) 님이 2월 18일 질문
안드11님이 6일 수정
캡쳐한 이미지들이 선명하지가 않아서 알아볼 수 없는 부분들도 많은데, 혹시 해당 API의 URL을 웹브라우져나 Postman 같은 툴에서 호출해 보셨나요? 만약 거거에서 된다면, 당연히 님의 Retrofit사용법이 잘못된 거구요, 만약 거기에서도 안된다면 API에 전달해주어야 할 정보들이 빠져있다고 볼 수 있습니다.
덕분에 알려주신대로 postman을 사용하여 테스트해보았고, 잘 돌아가는것을 확인하였으며 retrofit 데이터 형식에 문제가 있음을 파악하고 변경하였습니다. 감사합니다. 그런데 이후 'Expected name at line 1 column 546 path $.response..[0].'라는 에러가 뜹니다. 이건 어떻게 해결해야하나요?

아래는 바꾼 코드입니다.
<수정된 retrofit 데이터형식>

public class Response_J {
    @SerializedName("header")
    @Expose
    private Header header;
    @SerializedName("body")
    @Expose
    private Body body;

    public Header getHeader(){
        return header;
    }

    public void setHeader(Header header){
        this.header = header;
    }

    public Body getBody() {
        return body;
    }

    public void setBody(Body body) {
        this.body = body;
    }

    @NonNull
    @Override
    public String toString() {
        return "[body: " +
                body +
                "header: " +
                header +
                "]";
    }
}



public interface RetrofitInterface {
    @GET("openapi/tn_pubr_public_cltur_fstvl_api?serviceKey=서비스키&pageNo=0&numOfRows=100&type=json")
    Call<Response_J> getEvent(@Query("serviceKey") String serviceKey, @Query("pageNo") int pageNo, @Query("numOfRows") int numOfRows, @Query("type") String type);
}



public class Header {
    @SerializedName("resultCode")
    @Expose
    private String resultCode;
    @SerializedName("resultMsg")
    @Expose
    private String resultMsg;
    @SerializedName("type")
    @Expose
    private String type;

    public String getResultCode() {
        return resultCode;
    }

    public void setResultCode(String resultCode) {
        this.resultCode = resultCode;
    }

    public String getResultMsg() {
        return resultMsg;
    }

    public void setResultMsg(String resultMsg) {
        this.resultMsg = resultMsg;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }
}



public class Body {
    @SerializedName("items")
    @Expose
    private List<Items> items = null;
    @SerializedName("totalCount")
    @Expose
    private int totalCount;
    @SerializedName("numOfRows")
    @Expose
    private int numOfRows;
    @SerializedName("pageNo")
    @Expose
    private int pageNo;

    public List<Items> getItems() {
        return items;
    }

    public void setItems(List<Items> items) {
        this.items = items;
    }

    public int getTotalCount() {
        return totalCount;
    }

    public void setTotalCount(int totalCount) {
        this.totalCount = totalCount;
    }

    public int getNumOfRows() {
        return numOfRows;
    }

    public void setNumOfRows(int numOfRows) {
        this.numOfRows = numOfRows;
    }

    public int getPageNo() {
        return pageNo;
    }

    public void setPageNo(int pageNo) {
        this.pageNo = pageNo;
    }
}



public class Items {
    @SerializedName("fstvlNm") //축제명
    @Expose
    private String fstvlNm;
    @SerializedName("opar") //개최장소
    @Expose
    private String opar;
    @SerializedName("fstvlStartDate") //축제시작일자
    @Expose
    private String fstvlStartDate;
    @SerializedName("fstvlEndDate") //축제종료일자
    @Expose
    private String fstvlEndDate;
    @SerializedName("fstvlCo") //축제내용
    @Expose
    private String fstvlCo;
    @SerializedName("mnnst") //주관기관
    @Expose
    private String mnnst;
    @SerializedName("auspcInstt") //주최기관
    @Expose
    private String auspcInstt;
    @SerializedName("suprtInstt") //후원기관
    @Expose
    private String suprtInstt;
    @SerializedName("phoneNumber") //전화번호
    @Expose
    private String phoneNumber;
    @SerializedName("homepageUrl") //홈페이지주소
    @Expose
    private String homepageUrl;
    @SerializedName("relateInfo") //관련정보
    @Expose
    private String relateInfo;
    @SerializedName("rdnmadr") //소재지도로명주소
    @Expose
    private String rdnmadr;
    @SerializedName("lnmadr") //소재지지번주소
    @Expose
    private String lnmadr;
    @SerializedName("latitude") //위도
    @Expose
    private String latitude;
    @SerializedName("longitude") //경도
    @Expose
    private String longitude;
    @SerializedName("referenceDate") //데이터기준일자
    @Expose
    private String referenceDate;
    @SerializedName("instt_code") //제공기관코드
    @Expose
    private String instt_code;
    @SerializedName("instt_nm") //제공기관기관명
    @Expose
    private String instt_nm;
}

2개의 답변

0 추천
 
채택된 답변

응답데이터를 가지고 생성되어야 하는 자바 클래스들은 다음과 같습니다.

public class Header{
    public String resultCode;
    public String resultMsg;
    public String type;
}

public class Item{
    public String fstvlNm;
    public String opar;
    public String fstvlStartDate;
    public String fstvlEndDate;
    public String fstvlCo;
    public String mnnst;
    public String auspcInstt;
    public String suprtInstt;
    public String phoneNumber;
    public String homepageUrl;
    public String relateInfo;
    public String rdnmadr;
    public String lnmadr;
    public String latitude;
    public String longitude;
    public String referenceDate;
    public String insttCode;
}

public class Body{
    public List<Item> items;
    public String totalCount;
    public String numOfRows;
    public String pageNo;
}

public class Response{
    public Header header;
    public Body body;
}

public class Root{
    public Response response;
}

 

spark (32,340 포인트) 님이 6일 답변
안드11님이 5일 채택됨
참조하여 다시 구성하였습니다.
<메인액티비티>
retrofitInterface.getEvent(0, 100, "json").enqueue(new Callback<Result>() {
            @Override
            public void onResponse(Call<Result> call, Response<Result> response) {
                Result result = response.body();
                //                Gson gson = new Gson();
//                Body body = gson.fromJson(response_j.toString(), Body.class);
                Response_J response_j = result.getResponse_j();
                Body body = response_j.getBody();
                items = body.getItems();
                Log.d("retrofit", "Data fetch success");
                for(int i = 0; i < items.size(); i++) {
                    Log.d("출력 내용", items.get(i).toString());
                }
            }

            @Override
            public void onFailure(Call<Result> call, Throwable t) {
                Log.d("retrofit 오류", t.getMessage());
            }
        });

<root>
public class Result {
    @SerializedName("response_j")
    @Expose
    private Response_J response_j;

    public Response_J getResponse_j() {
        return response_j;
    }

    public void setResponse_j(Response_J response_j) {
        this.response_j = response_j;
    }
}

<response>
public class Response_J {
    @SerializedName("header")
    @Expose
    private Header header;
    @SerializedName("body")
    @Expose
    private Body body;

    public Header getHeader(){
        return header;
    }

    public void setHeader(Header header){
        this.header = header;
    }

    public Body getBody() {
        return body;
    }

    public void setBody(Body body) {
        this.body = body;
    }

    @NonNull
    @Override
    public String toString() {
        return "[body: " +
                body +
                "header: " +
                header +
                "]";
    }
}

<body>
public class Body {
    @SerializedName("items")
    @Expose
    private List<Items> items = null;
    @SerializedName("totalCount")
    @Expose
    private String totalCount;
    @SerializedName("numOfRows")
    @Expose
    private String numOfRows;
    @SerializedName("pageNo")
    @Expose
    private String pageNo;

    public List<Items> getItems() {
        return items;
    }

    public void setItems(List<Items> items) {
        this.items = items;
    }

    public String getTotalCount() {
        return totalCount;
    }

    public void setTotalCount(String totalCount) {
        this.totalCount = totalCount;
    }

    public String getNumOfRows() {
        return numOfRows;
    }

    public void setNumOfRows(String numOfRows) {
        this.numOfRows = numOfRows;
    }

    public String getPageNo() {
        return pageNo;
    }

    public void setPageNo(String pageNo) {
        this.pageNo = pageNo;
    }
}

<header>
public class Header {
    @SerializedName("resultCode")
    @Expose
    private String resultCode;
    @SerializedName("resultMsg")
    @Expose
    private String resultMsg;
    @SerializedName("type")
    @Expose
    private String type;

    public String getResultCode() {
        return resultCode;
    }

    public void setResultCode(String resultCode) {
        this.resultCode = resultCode;
    }

    public String getResultMsg() {
        return resultMsg;
    }

    public void setResultMsg(String resultMsg) {
        this.resultMsg = resultMsg;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }
}

<item>

    private String fstvlCo;
    @SerializedName("mnnst") //주관기관
    @Expose
    private String mnnst;
    @SerializedName("auspcInstt") //주최기관
    @Expose
    private String auspcInstt;
    @SerializedName("suprtInstt") //후원기관
    @Expose
    private String suprtInstt;
    @SerializedName("phoneNumber") //전화번호
    @Expose
    private String phoneNumber;
    @SerializedName("homepageUrl") //홈페이지주소
    @Expose
    private String homepageUrl;
    @SerializedName("relateInfo") //관련정보
    @Expose
    private String relateInfo;
    @SerializedName("rdnmadr") //소재지도로명주소
    @Expose
    private String rdnmadr;
    @SerializedName("lnmadr") //소재지지번주소
    @Expose
    private String lnmadr;
    @SerializedName("latitude") //위도
    @Expose
    private String latitude;
    @SerializedName("longitude") //경도
    @Expose
    private String longitude;
    @SerializedName("referenceDate") //데이터기준일자
    @Expose
    private String referenceDate;
    @SerializedName("instt_code") //제공기관코드
    @Expose
    private String instt_code;
}
<postman으로 테스트한 응답코드는 위의 본문에 다시 수정하여 링크 올렸습니다.>
{"response":
    {"header":
        {"resultCode":"00","resultMsg":"NORMAL_SERVICE","type":"json"},
    "body":{
        "items":[
            {
                "fstvlNm":"상화문학제",
                "opar":"비대면/수성아트피아",
                "fstvlStartDate":"2020-07-01",
                "fstvlEndDate":"2020-08-31",
                "fstvlCo":"백일장 공모, 시낭송대회, 문학강연 등",
                "mnnst":"수성문화원",
                "auspcInstt":"수성문화원",
                "suprtInstt":"대구광역시 수성구",
                "phoneNumber":"053-768-0002",
                "homepageUrl":"http://www.suseong.or.kr",
                "relateInfo":"",
                "rdnmadr":"대구광역시 수성구 무학로 112",
                "lnmadr":"대구광역시 수성구 두산동 499-4",
                "latitude":"35.82937671",
                "longitude":"128.6205781",
                "referenceDate":"2020-12-01",
                "insttCode":"3460000",
            },

데이터의
insttCode가 클래스에 instt_code 로 되어 있잖아요.
이런 스펠링 체크하라고 이 게시판이 있지 않습니다.

이런 질문 올린 것에 대해서 반성하시고,
앞으로는 철저하게 1차 체크를 하시고 질문을 올려 주세요.

누구나 다 그럴 수 있습니다.
앞으로만 안그러시면 됩니다.

에러도 정확합니다. line 1의 column 546 이 바로 저 부분입니다.
도와주셔서 감사합니다. 앞으로는 1차체크를 꼭 한 후 올리겠습니다.
0 추천
데이터를 보니까 response 가 맨위에 있고 그 밑에 header도 있고 한데

클래스엔 그런 정보가 하나도 없네요.

json 결과를 class definition으로 만들어 본 적이 한번도 없다면,

그거부터 공부하셔야 겠네요.

좋은 샘플들을 찾아서 먼저 공부하고, 적용하는게 맞을 것 같네요. 하루면 충분하죠.

참고로 json을 java로 컨버팅 해주는 웹페이지가 있습니다.
https://codebeautify.org/json-to-java-converter

이게 완벽하게는 안되기 때문에, 한 depth씩 만들어서 처리해야 합니다.
다른 좋은 사이트가 있을 수도...
저는 이거 없어도 지장이 없지만, 처음엔 조금 도움이 되더라구요.

json 데이터로 retrofit 처리하는 샘플은 이미 너무 많지만,
초간단하게는 아래와 같은 강좌가 있습니다.
뎁스가 너무 간단하지만, 이 샘플의 장점은 json 데이터를 보면서 코딩하는 예시를 보여준다는 점이죠.

https://www.youtube.com/watch?v=qqMZrWPIAog

json이 간단해 보여도, 결국엔 다양한 계층구조를 가진 데이터 구조체이기 때문에
실제로 구현하려면 많은 클래스를 선언해야 합니다.

그러나 만들고 나면 진정으로 데이터 구조가 형성되죠.
Will Kim (42,330 포인트) 님이 2월 18일 답변
retrofit 데이터 형식에 문제가 있음을 파악하고 변경하였으며 앱이 잘 작동하는 것까지 확인하였습니다. 그런데 이후 'Expected name at line 1 column 546 path $.response..[0].'라는 에러가 뜨는데 어떻게 해결해야 할지 모르겠어요.
아래는 변경한 RETROFIT 데이터형식입니다.
<수정된 retrofit 데이터형식>

public class Response_J {
    @SerializedName("header")
    @Expose
    private Header header;
    @SerializedName("body")
    @Expose
    private Body body;

    public Header getHeader(){
        return header;
    }

    public void setHeader(Header header){
        this.header = header;
    }

    public Body getBody() {
        return body;
    }

    public void setBody(Body body) {
        this.body = body;
    }

    @NonNull
    @Override
    public String toString() {
        return "[body: " +
                body +
                "header: " +
                header +
                "]";
    }
}



public interface RetrofitInterface {
    @GET("openapi/tn_pubr_public_cltur_fstvl_api?serviceKey=서비스키&pageNo=0&numOfRows=100&type=json")
    Call<Response_J> getEvent(@Query("serviceKey") String serviceKey, @Query("pageNo") int pageNo, @Query("numOfRows") int numOfRows, @Query("type") String type);
}



public class Header {
    @SerializedName("resultCode")
    @Expose
    private String resultCode;
    @SerializedName("resultMsg")
    @Expose
    private String resultMsg;
    @SerializedName("type")
    @Expose
    private String type;

    public String getResultCode() {
        return resultCode;
    }

    public void setResultCode(String resultCode) {
        this.resultCode = resultCode;
    }

    public String getResultMsg() {
        return resultMsg;
    }

    public void setResultMsg(String resultMsg) {
        this.resultMsg = resultMsg;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }
}



public class Body {
    @SerializedName("items")
    @Expose
    private List<Items> items = null;
    @SerializedName("totalCount")
    @Expose
    private int totalCount;
    @SerializedName("numOfRows")
    @Expose
    private int numOfRows;
    @SerializedName("pageNo")
    @Expose
    private int pageNo;

    public List<Items> getItems() {
        return items;
    }

    public void setItems(List<Items> items) {
        this.items = items;
    }

    public int getTotalCount() {
        return totalCount;
    }

    public void setTotalCount(int totalCount) {
        this.totalCount = totalCount;
    }

    public int getNumOfRows() {
        return numOfRows;
    }

    public void setNumOfRows(int numOfRows) {
        this.numOfRows = numOfRows;
    }

    public int getPageNo() {
        return pageNo;
    }

    public void setPageNo(int pageNo) {
        this.pageNo = pageNo;
    }
}



public class Items {
    @SerializedName("fstvlNm") //축제명
    @Expose
    private String fstvlNm;
    @SerializedName("opar") //개최장소
    @Expose
    private String opar;
    @SerializedName("fstvlStartDate") //축제시작일자
    @Expose
    private String fstvlStartDate;
    @SerializedName("fstvlEndDate") //축제종료일자
    @Expose
    private String fstvlEndDate;
    @SerializedName("fstvlCo") //축제내용
    @Expose
    private String fstvlCo;
    @SerializedName("mnnst") //주관기관
    @Expose
    private String mnnst;
    @SerializedName("auspcInstt") //주최기관
    @Expose
    private String auspcInstt;
    @SerializedName("suprtInstt") //후원기관
    @Expose
    private String suprtInstt;
    @SerializedName("phoneNumber") //전화번호
    @Expose
    private String phoneNumber;
    @SerializedName("homepageUrl") //홈페이지주소
    @Expose
    private String homepageUrl;
    @SerializedName("relateInfo") //관련정보
    @Expose
    private String relateInfo;
    @SerializedName("rdnmadr") //소재지도로명주소
    @Expose
    private String rdnmadr;
    @SerializedName("lnmadr") //소재지지번주소
    @Expose
    private String lnmadr;
    @SerializedName("latitude") //위도
    @Expose
    private String latitude;
    @SerializedName("longitude") //경도
    @Expose
    private String longitude;
    @SerializedName("referenceDate") //데이터기준일자
    @Expose
    private String referenceDate;
    @SerializedName("instt_code") //제공기관코드
    @Expose
    private String instt_code;
    @SerializedName("instt_nm") //제공기관기관명
    @Expose
    private String instt_nm;
}
에러 전체를 캡쳐해서 올려주시겠어요?
위의 에러만 봐서는
line1에 column 546(?) 은 소스가 아닌 다른 곳인 것 같네요.
아마도 json에서 546열에 있는 이름하고 class 내의 명칭이 다를 듯 보이네요.
응답 json을 보여주세요. 위에 캡쳐는 안보입니다.
텍스트로 주세요.
죄송합니다. 제가 생각을 못해서 너무 방대한 json을 올렸습니다.
다시 올려드릴께요.
<밑에 코드가 json코드입니다.>
{"response":{"header":{"resultCode":"00","resultMsg":"NORMAL_SERVICE","type":"json"},"body":{"items":[{"fstvlNm":"부산고등어축제(취소)","opar":"송도해수욕장 및 부산공동어시장 일원","fstvlStartDate":"2020-10-23","fstvlEndDate":"2020-10-25","fstvlCo":"코로나19 확산 차단을 위해 축제 취소","mnnst":"(사)부산서구문화원","auspcInstt":"부산광역시 서구+대형선망수협","suprtInstt":"부산광역시, 부산공동어시장, 수협중앙회, 부산은행, 부산광역시교육청, 부산광역시서부교육지원청","phoneNumber":"051-240-4062","homepageUrl":"http://www.busangde.co.kr","relateInfo":"송도해수욕장, 부산공동어시장, 송도구름산책로, 송도해상케이블카, 송도오토캠핑장, 송도해안볼레길, 암남공원","rdnmadr":"부산광역시 서구 송도해변로 100","lnmadr":"부산광역시 서구 암남동 135-5","latitude":"35.07682117","longitude":"129.0180502","referenceDate":"2020-11-06","insttCode":"3260000",},{"fstvlNm":"평창송어축제","opar":"진부면 오대천일원","fstvlStartDate":"2019-12-28","fstvlEndDate":"2020-02-02","fstvlCo":"송어얼음낚시+송어맨손잡기","mnnst":"평창송어축제위원회","auspcInstt":"강원도 평창군","suprtInstt":"문화체육관광부,강원도, 한국관광공사","phoneNumber":"033-336-4000","homepageUrl":"http://www.festival700.or.kr","relateInfo":"주변관광지 및 행사정보제공","rdnmadr":"강원도 평창군 진부면 경강로 3562","lnmadr":"강원도 평창군 진부면 하진부리 325","latitude":"37.633219","longitude":"128.557038","referenceDate":"2020-11-25","insttCode":"4280000",},{"fstvlNm":"대관령눈꽃축제","opar":"대관령면 횡계리 송천일원","fstvlStartDate":"2020-01-17","fstvlEndDate":"2020-01-27","fstvlCo":"눈조각전시+눈썰매체험","mnnst":"대관령면축제위원회","auspcInstt":"강원도 평창군","suprtInstt":"평창군","phoneNumber":"033-335-3995","homepageUrl":"http://www.snowfestival.net","relateInfo":"주변관광지 및 행사정보제공","rdnmadr":"강원도 평창군 대관령면 장선길 28","lnmadr":"강원도 평창군 대관령면 횡계리 661-29","latitude":"37.670709","longitude":"128.704625","referenceDate":"2020-11-25","insttCode":"4280000",},{"fstvlNm":"오대산문화축전","opar":"오대산 월정사","fstvlStartDate":"2020-10-08","fstvlEndDate":"2020-10-11","fstvlCo":"산사음악회+전시+불교문화체험","mnnst":"월정사","auspcInstt":"강원도 평창군","suprtInstt":"강원도","phoneNumber":"033-339-6800","homepageUrl":"http://www.woljeongsa.org","relateInfo":"주변관광지 및 행사정보제공","rdnmadr":"강원도 평창군 진부면 오대산로 413-28","lnmadr":"강원도 평창군 진부면 동산리63-9","latitude":"37.734039","longitude":"128.587597","referenceDate":"2020-11-25","insttCode":"4280000",},{"fstvlNm":"땅끝매화축제","opar":"보해매실농원","fstvlStartDate":"2020-03-07","fstvlEndDate":"2020-03-15","fstvlCo":"매화향기(공연), 매화포토존, 체험 등","mnnst":"땅끝매화축체추진위원회","auspcInstt":"땅끝매화축체추진위원회","suprtInstt":"해남군, 보해양조","phoneNumber":"061-531-3512","homepageUrl":"www.haenam.go.kr","relateInfo":"","rdnmadr":"전라남도 해남군 산이면 예덕길 125-89","lnmadr":"전라남도 해남군 산이면 예정리 56-10","latitude":"34.62452401","longitude":"126.463392","referenceDate":"2020-12-07","insttCode":"4930000",},{"fstvlNm":"달마고도 걷기축제","opar":"미황사일원","fstvlStartDate":"2020-03-28","fstvlEndDate":"2020-03-28","fstvlCo":"달마고도순례길걷기, 무대행사, 체험등","mnnst":"전라남도 해남군","auspcInstt":"전라남도 해남군","suprtInstt":"미황사","phoneNumber":"061-530-5159","homepageUrl":"www.haenam.go.kr","relateInfo":"","rdnmadr":"전라남도 해남군 송지면 미황사길 164","lnmadr":"전라남도 해남군 송지면 서정리 1","latitude":"34.38223237","longitude":"126.5779589","referenceDate":"2020-12-07","insttCode":"4930000",},{"fstvlNm":"신창동 어울림축제","opar":"신창동 공방의 거리","fstvlStartDate":"2017-10-28","fstvlEndDate":"2017-10-28","fstvlCo":"주민운동회, 주민회의, 노래자랑, 나눔장터, 프리마켓 등","mnnst":"신창동 마을축제 추진위원회","auspcInstt":"광주광역시 광산구 신창동","suprtInstt":"null","phoneNumber":"null","homepageUrl":"null","relateInfo":"null","rdnmadr":"광주광역시 광산구 왕버들로 291","lnmadr":"null","latitude":"35.1956384","longitude":"126.840969","referenceDate":"2019-01-01","insttCode":"3630000",},{"fstvlNm":"제2회 하남동 도농공 한울타리 어울림축제","opar":"경암근린공원","fstvlStartDate":"2017-10-28","fstvlEndDate":"2017-10-28","fstvlCo":"기념식, 문화공연, 주민노래자랑, 플리마켓 등","mnnst":"하남동 한울타리 어울림축제 추진위원회","auspcInstt":"광주광역시 광산구 하남동","suprtInstt":"null","phoneNumber":"null","homepageUrl":"null","relateInfo":"null","rdnmadr":"광주광역시 광산구 하남대로54번안길 133","lnmadr":"null","latitude":"35.178175","longitude":"126.7999659","referenceDate":"2019-01-01","insttCode":"3630000",},{"fstvlNm":"흑석산 철쭉제","opar":"가학산자연휴양림","fstvlStartDate":"2020-04-25","fstvlEndDate":"2020-04-26","fstvlCo":"산신제, 어린이체험, 산행, 농산물홍보 등","mnnst":"흑석산철쭉제추진위원회","auspcInstt":"흑석산철쭉제추진위원회","suprtInstt":"해남군","phoneNumber":"061-531-3362","homepageUrl":"www.haenam.go.kr","relateInfo":"","rdnmadr":"전라남도 해남군 계곡면 산골길 306","lnmadr":"전라남도 해남군 계곡면 가학리 산1","latitude":"34.6709354","longitude":"126.6169962","referenceDate":"2020-12-07","insttCode":"4930000",},{"fstvlNm":"연호보리축제","opar":"냔냔이농원","fstvlStartDate":"2020-05-30","fstvlEndDate":"2020-05-30","fstvlCo":"보리밭체험, 문화탐방, 참여마당, 놀이마당, 나만의 인생샷 포토존, 무대공연, 솟대만들기","mnnst":"연호마을축제위원회","auspcInstt":"연호마을축제위원회","suprtInstt":"해남군","phoneNumber":"061-535-1092","homepageUrl":"www.haenam.go.kr","relateInfo":"","rdnmadr":"전라남도 해남군 황산면 원금길 162-51","lnmadr":"전라남도 해남군 황산면 연호리 482-2","latitude":"34.59870438","longitude":"126.4913358","referenceDate":"2020-12-07","insttCode":"4930000",}],"totalCount": "1037","numOfRows": "10","pageNo": "1"}}}
에러코드는 log.d로 찍은건데  'Expected name at line 1 column 546 path $.response..[0].'이 전부입니다.
...