웹 개발2009. 1. 14. 15:52

화면에 json 코드가 보여진다고 다 만들어진 것이 아니었습니다.

예를 들어 다음과 같은 json을 만들어주는 페이지가 있다고 할 때,

[
{ "symbol": "ABC", "price": 96.204659543522, "change": -1.6047997669492 },
{ "symbol": "DEF", "price": 61.929176899084, "change": 0.22809544419493 }
]
위 json을 만들어주는 코드를 jsp로 짜고 출력했더니 화면에 똑같이 나왔습니다. 그런데 계속 파싱에러 ㅡ.ㅡ
이상해서 받은 거 그냥 뿌렸더니 html 코드랑 섞여 나오더군요.
중요한 건 contentType을  text/html이 아니라 text/javascript로 해주는 것이었습니다.
이걸 실수해서 괜히 엄한 코드 디버깅하며 쫓아가며 겨우뚱 했네요 ㅎㅎ
컨텐트 타입을 자바스크립트로 하면 웹에 뿌려지는 것이 아니라 보통은 다운로드됩니다.
참고로 위 json 만드는 JSP 소스를 싣습니다. (구글 코드에 있는 php 예제를 단순히 jsp로 바꾼 겁니다.)
<%@ page language="java" contentType="text/javascript; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<%@page import="java.util.Random"%>
<%
final double MAX_PRICE = 100.0; // $100.00
final double MAX_PRICE_CHANGE = 0.02; // +/- 2%
double price;
double change;
Random random = new Random();
String q = request.getParameter("q"); 
 out.print("[" + "");
 if(q != null){
  String[] symbols = q.split(" ");
  for(int i=0; i<symbols.length; i++){


   price = random.nextDouble() * MAX_PRICE;
   change = price * MAX_PRICE_CHANGE * (random.nextDouble() * 2.0 - 1.0);
   out.print("{" + "");   out.print("\"symbol\":\"" + symbols[i] +"\"," + "");   out.print("\"price\":" + price +"," + "");
   out.print("\"change\":" + change +"" + "");   out.print("}" + "");
   if(i < symbols.length - 1)
    out.print("," + "");
  }
 }
 out.print("]" + "");
%>
Posted by net4all