当前位置: 首页 > 面试题库 >

用Java解码JSON字符串

狄飞鹏
2023-03-14
问题内容

我对使用Java中的json-simple库是陌生的,并且已经经历了编码和解码示例。复制编码示例很好,但是我无法使解码示例与混合类型JSON一起使用。

我的问题之一是库中有太多类,这些类没有正确记录,因此我没有源(以便能够通读并理解它们的目的)。因此,我努力了解如何使用许多此类。

阅读此示例后:

String jsonText = "{\"first\": 123, \"second\": [4, 5, 6], \"third\": 789}";
JSONParser parser = new JSONParser();

ContainerFactory containerFactory = new ContainerFactory(){
    public List creatArrayContainer() {
        return new LinkedList();
    }

    public Map createObjectContainer() {
        return new LinkedHashMap();
    }                     
};

try {
    Map json = (Map)parser.parse(jsonText, containerFactory);
    Iterator iter = json.entrySet().iterator();
    System.out.println("==iterate result==");

    while(iter.hasNext()) {
        Map.Entry entry = (Map.Entry)iter.next();
        System.out.println(entry.getKey() + "=>" + entry.getValue());
    }

    System.out.println("==toJSONString()==");
    System.out.println(JSONValue.toJSONString(json));
} catch(ParseException pe) {
    System.out.println(pe);
}

从json-simple官方解码教程中,我尝试解码此JSON:

{
"stat":{
    "sdr": "MAC address of FLYPORT",
    "rcv": "ff:ff:ff:ff:ff:ff",
    "time": "0000000000000",
    "type": 0,
    "subt": 0,
    "argv": [
        {"type": "6","val": "NetbiosName"},
        {"type": "6","val": "MACaddrFlyport"},
        {"type": "6","val": "FlyportModel"},
        {"type": "1","val": id}
    ]
}
}

我正在编写以下代码进行解码:

    String jsonString = "{\"stat\":{\"sdr\": \"aa:bb:cc:dd:ee:ff\",\"rcv\": \"aa:bb:cc:dd:ee:ff\",\"time\": \"UTC in millis\",\"type\": 1,\"subt\": 1,\"argv\": [{1,2},{2,3}]}}";
    JSONObject jsonObject = new JSONObject(jsonString);
    JSONObject newJSON = jsonObject.getJSONObject("stat");
    System.out.println(newJSON);

但这是行不通的。实际上,我也无法使未修改的示例正常工作,并且原始作者也没有解释他们的代码。

如图所示,解码此JSON的最简单方法是什么?


问题答案:

这是最好和最简单的代码:

public class test
{
    public static void main(String str[])
    {
        String jsonString = "{\"stat\": { \"sdr\": \"aa:bb:cc:dd:ee:ff\", \"rcv\": \"aa:bb:cc:dd:ee:ff\", \"time\": \"UTC in millis\", \"type\": 1, \"subt\": 1, \"argv\": [{\"type\": 1, \"val\":\"stackoverflow\"}]}}";
        JSONObject jsonObject = new JSONObject(jsonString);
        JSONObject newJSON = jsonObject.getJSONObject("stat");
        System.out.println(newJSON.toString());
        jsonObject = new JSONObject(newJSON.toString());
        System.out.println(jsonObject.getString("rcv"));
       System.out.println(jsonObject.getJSONArray("argv"));
    }
}

json文件的库定义在此处给出。它与此处发布的库不同,即由您发布。您发布的是我使用过的简单json 库。

您可以下载zip。然后package在您的项目中使用 org.json
作为名称创建一个。并将所有下载的代码粘贴到此处,玩得开心。

我觉得这是最好,最简单的JSON解码。



 类似资料:
  • 问题内容: 我正在尝试解析java中的JSON字符串,以单独打印各个值。但是,在使程序运行时,出现以下错误- 我的班级看起来像- 让我知道我丢失了什么,或者为什么每次运行该应用程序时都会得到该错误。任何意见,将不胜感激。 问题答案: 看我的评论。当以 android.jar身份运行时,您需要包含完整的org.json库。仅包含要针对其进行编译的存根。 __ 此外,您还必须在JSON数据中删除额外的

  • 问题内容: 大家好,我是从外部Api获取websocket信息的,它以这种方式给了我json响应: 我把它放在这个结构中 并用代码解码 我遇到错误 我知道该错误是文本字段值的结果。有什么好的方法可以清理它或告诉解码器忽略文本字段的内容吗? 问题答案: 该应用程序正在解析包含substring的数据。这是无效的JSON。错误消息抱怨in 。 由于JSON值包含编码的JSON值,因此应用程序必须分两个

  • 问题内容: 大家!我可以请您帮我解码以下JSON代码: 我想将上述结构组织为: 注1: 文件夹:收件箱 来自(来自):… 日期(日期):… 时间(时间):… utcOffsetSeconds:… 收件人(地址):… 收件人(姓名):… 状态(deliveryStatus):… 文字(正文):… 笔记2: … 先感谢您! 问题答案: 您可以使用该函数来解码JSON字符串: 而且您会得到像这样的东西:

  • 问题内容: 我有一些json,我需要解码,更改然后编码,而不会弄乱任何字符。 如果我在json字符串中包含unicode字符,它将无法解码。我不知道为什么,因为json.org说一个字符串可以包含:。但这在python中也不起作用。 我可以使用utf8_encode,该字符串将允许使用json_decode对字符串进行解码,但是字符会被压缩成其他形式。这是来自结果数组的print_r的结果。两个字

  • 问题内容: 我正在寻找一个示例代码/ lib,以使用C#解码JSON字符串。 要编码,我可以这样做: 但是我该如何解码? 问题答案: 你可以这样做:

  • 我有一个用mvn Exec:java运行的程序(我的主文件是用utf-8编码的,系统的默认字符集是windows-1252) 我不明白为什么第一次打印工作,根据文档getBytes使用给定的字符集将字符串编码成字节序列,字符串构造函数通过使用平台的默认字符集解码指定的字节数组来构造新的字符串