2011-11-18 4 views
2

인터넷에서 찾은이 예제를 실행하려고합니다. 다음 행에 도달하면 다음 오류로 종료됩니다. 오류 및 sample-json.txt가 예제 코드 아래에 붙여 넣어졌습니다. 나는 명백한 것을 놓치고 있는가?Java json 파싱 예외

JSONObject json = (JSONObject) JSONSerializer.toJSON(jsonTxt); 

수입 : 여기

package com.discursive.answers; 

import java.io.InputStream; 

import net.sf.json.JSONObject; 
import net.sf.json.JSONSerializer; 

import org.apache.commons.io.IOUtils; 
public class JsonParsing { 

public static void main(String[] args) throws Exception { 
    InputStream is = JsonParsing.class.getResourceAsStream("sample-json.txt"); 
    String jsonTxt = IOUtils.toString(is); 

    JSONObject json = (JSONObject) JSONSerializer.toJSON(jsonTxt);   
    double coolness = json.getDouble("coolness"); 
    int altitude = json.getInt("altitude"); 
    JSONObject pilot = json.getJSONObject("pilot"); 
    String firstName = pilot.getString("firstName"); 
    String lastName = pilot.getString("lastName"); 

    System.out.println("Coolness: " + coolness); 
    System.out.println("Altitude: " + altitude); 
    System.out.println("Pilot: " + lastName); 
    } 
} 


Error: 
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/lang/exception/NestableRuntimeException 
Disconnected from the target VM, address: '127.0.0.1:59138', transport: 'socket' 
at java.lang.ClassLoader.defineClass1(Native Method) 
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631) 
at java.lang.ClassLoader.defineClass(ClassLoader.java:615) 
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141) 
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283) 
at java.net.URLClassLoader.access$000(URLClassLoader.java:58) 
at java.net.URLClassLoader$1.run(URLClassLoader.java:197) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
st java.lang.ClassLoader.loadClass(ClassLoader.java:306) 
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:247) 
at com.discursive.answers.JsonParsing.main(JsonParsing.java:28) 
Caused by: java.lang.ClassNotFoundException: org.apache.commons.lang.exception.NestableRuntimeException 

열립니다 샘플-json.txt 파일입니다. 당신이 당신의 클래스 경로에서 commons-lang.jar 누락하고 있기 때문에처럼

{'foo':'bar', 
'coolness':2.0, 
'altitude':39000, 
'pilot':{'firstName':'Buzz', 
      'lastName':'Aldrin'}, 
'mission':'apollo 11'} 

답변

3

네, 분명 클래스 패스 문제입니다. 타사 라이브러리가 없어도 프로젝트를 컴파일 할 수 있지만 클래스 경로에 해당 라이브러리가 없으면 실행할 수 없습니다.

귀하의 코드를 로컬 시스템에 복사했으며 귀하가 얻은 동일한 (초기) 예외를 받았음을 확인했습니다. commons-lang-2.6.jar 파일을 잡아 내 클래스 경로에 퍼팅 후, 지금은 다음과 같은 예외가 발생하고 있습니다 :

$ java com.so.Q8187623 
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory 
at net.sf.json.AbstractJSON.<clinit>(AbstractJSON.java:53) 
at net.sf.json.util.CycleDetectionStrategy.<clinit>(CycleDetectionStrategy.java:36) 
at net.sf.json.JsonConfig.<clinit>(JsonConfig.java:65) 
at net.sf.json.JSONSerializer.toJSON(JSONSerializer.java:84) 
at com.so.Q8187623.main(Q8187623.java:15) 
Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory 
at java.net.URLClassLoader$1.run(URLClassLoader.java:202) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:306) 
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:247) 
... 5 more 

그래서 그냥 클래스 패스에 클래스를 추가하는 토끼 구멍 아래로 당신의 방법 ...

+0

맥 OSX 라이온의/System/Library/Java/Extensions에 jar 파일을 넣을 수있는 느낌이 들었습니다. 이 올바른지? 내 lang jar 파일로이 작업을 수행했지만 여전히 동일한 오류가 발생합니다. – Green

+0

OSX에서'/ Users/yourname/Library/Java/lib'에 넣으십시오. – Mike

+0

나는 다음을 사용하려고 시도했다 : commons-lang3-3.1.jar, 나는 commons-lang-2.6.jar로 바꾼다. 이제는 잘 동작한다. – Green

0

즉시 오류가 보인다. 그러나 찾을 수없는 클래스가 예외이기 때문에, 나는 그 오류를 수정하면 즉시 NestedRuntimeException 형태로 던져 질 것이라고 의심한다.

+0

에 따라 @ Green JSON lib에는 commons-lang과 다른 라이브러리가 필요합니다. http://json-lib.sourceforge.net/을 확인하십시오. – Adi