Java json解析异常

时间:2011-11-18 18:56:03

标签: java json

我正试图运行我在互联网上找到的这个例子。当它到达以下行时,它会终止并出现以下错误。错误和sample-json.txt粘贴在示例代码下面。我错过了一些明显的东西吗?

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

这是打开的sample-json.txt文件。

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

3 个答案:

答案 0 :(得分: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

所以,按照你的方式沿着兔子洞向你的课程路径添加课程......

答案 1 :(得分:0)

立即错误看起来像是因为您从类路径中丢失了commons-lang.jar。但是,鉴于无法找到的类是一个例外,我强烈怀疑当你修复了这个错误时,你会立即得到另一个......以NestedRuntimeException被抛出的形式

答案 2 :(得分:0)

我碰到了同样的问题。我使用commons-collections 3.2.2 with commons-lang 2.6。 将commons-collection降级为3.2.1后问题得到了解决。