The method get(String) is undefined for the type Object
The method getJSONObject(String) is undefined for the type JSONObject
JSP에서 다국어 지원을 해야하는 상황이 생겨서
json 파일을 파싱하여
화면에 맞게 데이터를 출력하려고 했는데
위와 같은 비슷한 에러들(찾는 데이터가 undefined, 즉 데이터를 찾을 수 없다는..)이 계속 떴다.
// lang.en.json
{
"content":{
"example":"???",
"example-array": {
"text": [
"text1",
"text2"
]
}
}
}
<%@ page import="java.io.*" %>
<%@ page import="org.json.*" %>
<%@ page import="org.json.simple.*" %>
<%@ page import="org.json.simple.parser.*" %>
<%
try {
// json 파일 읽기
Reader reader = new FileReader(request.getRealPath("json file path"));
// json 파싱
JSONParser parser = new JSONParser();
JSONObject jsonObject = (JSONObject) parser.parse(reader);
// json 접근(여기에서 위와 같은 에러가 발생했다.)
jsonObject.get("content").get("example");
} catch(IOException ex) {
System.out.println("error");
}
%>
뭐 json 파일도 고쳐보고 getJSONObject, getAsString 등 써봤는데도
똑같은 오류가 계속 떠서 검색하다가 해결했는데
아래 사이트와 같이 강제 형변환을 하여 해결해주면 된다.
// 변수에 넣어서 값 출력
JSONObject temp = (JSONObject)jsonObject.get("content");
System.out.println(temp.get("example"));
// 한 줄로 쓰고 싶다면
System.out.println(((JSONObject)jsonObject.get("content")).get("example"));
// 결과 : ???
근데 에러는 해결했지만
결국 json 데이터를 화면에 출력할 때,
<%= %>로 위 변수의 값을 출력해주어야 하는게 목적이라서...
이유는 모르겠지만
temp cannot be resolved to a variable 에러,
즉 JSP에서 저 변수를 찾지를 못해서
변수를 출력해주는 방법을 찾을 때까진 저 코드를 사용할 수도 없고
json 객체에 접근할 때
계속해서 .get으로 접근해야하는 것도 완전 불편하고 효율적이지도 않아서
대표님이 알려주신 Jstl을 이용하여 jsp -> json 형식 출력하는 것을 사용하기로 했다.
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ page import="java.io.*" %>
<%@ page import="org.json.simple.*" %>
<%@ page import="org.json.simple.parser.*" %>
<%
try {
// json 파일 읽기
Reader reader = new FileReader(request.getRealPath("json file path"));
// json 파싱
JSONParser parser = new JSONParser();
JSONObject jsonObject = (JSONObject) parser.parse(reader);
// json 접근
pageContext.setAttribute("test", jsonObject);
} catch(IOException ex) {
System.out.println("error");
}
%>
실제로 화면에 출력할 땐 아래와 같이 간단하게 출력해주면 된다.
<h1>${test.content.example}</h1>
<h1>${test.content['example-array'].text[0]}</h1>
ps. 삽질하는 사람들의 시간을 절약하기 위해 포스팅 해봄........
'Language > Java, Jsp' 카테고리의 다른 글
JSP cafe24 SMS send (0) | 2022.03.24 |
---|---|
jstl funtion (0) | 2022.03.18 |
JSP ResultSet 전체 레코드 개수 구하기 (0) | 2022.03.16 |
jstl 문법 정리 (0) | 2022.03.12 |
이클립스 톰캣 서버 오류 및 서버 설정 (0) | 2018.07.21 |