• java 解析json的问题


    本文转载自http://chriszz.sinaapp.com/?p=392

    Json就是Javascript notation,可以替代XML,用做数据交互。

    Json的两种基本表示形式,可以用自动机表示:

    json1json2

    *********************************************************************************

    在Java中可以使用json-lib的相关包来解析Json数据。Google到的结果表明,我们需要如下6个包:

    json-lib本身:
    json-lib-2.4-jdk15
    依赖包:
    jakarta commons-lang 2.5
    jakarta commons-beanutils 1.8.0
    jakarta commons-collections 3.2.1
    jakarta commons-logging 1.1.1
    ezmorph 1.0.6

    这时候,我们建立一个Java工程来测试,其中只有一个Java文件JsonLibTest.java:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    package chris.json;
     
    import net.sf.json.JSONArray;
     
    public class JsonLibTest {
        public void testArrayToJSON(){
            boolean[] boolArray = new boolean[]{true, false, true};
            JSONArray jsonArray = JSONArray.fromObject(boolArray);
            System.out.println(jsonArray);
        }
     
        public static void main(String[] args){
            boolean[] boolArray = new boolean[]{true, false, true};
            JSONArray jsonArray = JSONArray.fromObject(boolArray);
            System.out.println(jsonArray);
        }

    然后在工程中新建一个lib文件夹,把上面6个包下载后复制到lib文件夹中,并全部选中,设定为"add to build path",然后运行,等待我们的是一段恶心的报错:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/lang/exception/NestableRuntimeException
        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)
        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)
        at chris.json.JsonLibTest.main(JsonLibTest.java:15)
    Caused by: java.lang.ClassNotFoundException: org.apache.commons.lang.exception.NestableRuntimeException
        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)
        ... 13 more

    然后依旧到Google上搜索,有人说是缺少包(显然不是,我们这里有6个包),stackoverflow上的回答也什么都没说清楚。

    仔细看了下错误的第一行,说的是org/apache/commons/lang/exception/NestableRuntimeException这个类没有找到,然后到commons-lang-2.5-bin.zip包里面寻找这个类,发现有这个类啊,为什么还是报错?索性把commons-lang-2.5-bin.zip包解压,把里面的commons-lang-2.5.jar复制出来,替换工程中lib目录下的commons-lang-2.5-bin.zip。再次运行,虽然还是报错,但是不报原来的错误了,说明原有错误解决了。索性把所有的zip包都解了压,抽取jar(但不包括javadoc、sources、adapters的jar包),替换lib目录下的zip包,然后重新config build path,代码可以运行了!

    所以,结论是:Eclpse导入zip格式的包时可能出现问题,最好还是导入jar包! 当然,关于需要什么版本的包,还是到官网上去看看,网上博客里面的教程一般都不会去更新的。。

    为了方便,我把这6个jar包放在一起了,可以到网盘下载

    作者:ChrisZZ
    本博客内容不设版权,但转载或引用请注明来源,作者ChrisZZ
  • 相关阅读:
    MySQL创建临时表
    mysql存储过程之事务篇
    sqlserver 和MySQL的一些函数的区别
    JBoss7 如何用脚本 启动 和 停止
    Mysql [Err] 1118
    Mysql [Err] 1118
    Javascript两个感叹号的用法(!!)
    Mac上PyCharm运行多进程报错的解决方案
    Mac iTerm2使用lrzsz上传和下载文件
    Linux使用socks代理
  • 原文地址:https://www.cnblogs.com/hyk110988/p/3627665.html
Copyright © 2020-2023  润新知