当前位置: 首页 > 知识库问答 >
问题:

将 JSON 字符串转换为纯键值对以进行日志记录

沙柏
2023-03-14

我有一个JSON字符串,其中包含如下结构,基本上我有一个VO链,每个VO都有VO列表和VO地图。

"MessageHeader": {
    "type": "new",
    "id": 10,
    "add_record": "true",
},
"MessageBody": {
    "dob_required": false,
    "dept_name": "Purchase",
    "group": {
        "main_group": "main group",
        "sub_group": "sub group"
    },
    "family_info": {
        "person1": {
            "name": "HisName",
            "gender": "male",
            "age": "31",
            "office_info_present": {
                "office_name": "present office",
                "office_address": "some address"
                "some_other_vo":{

                },
            },
            "office_info_previous": {
                "office_name": "old office",
                "office_address": "some address"
            },            
        },
        "person2": {
            "name": "HerName",
            "gender": "Female",
            "age": "25",
        }
    },
    "active":true
}

我想打印键值对中的每个属性名称及其值。我不想打印 VO 名称,而只想打印结束属性(叶级属性)

type=new id=10 add_record=true dob_required=false dept_name=purchase main_group=“main group”sub_group=“sub group”name=HisName性别=男性年龄=31……name=HerName性别=女性年龄=25

如何做到这一点?我更希望能用杰克逊来完成。否则也可以。

共有3个答案

燕烨
2023-03-14

是的,jackson可以用来解析。但这不是直接的。很少有类似于JAXB for XML的实现。但我从未测试过它们。这是粗略的代码片段。

JSONParser parser = new JSONParser();

    try {

        JSONObject jsonObject = (JSONObject) parser.parse(new FileReader("c:\\sample.json"));

        String name = (String) jsonObject.get("name");
        long age = (Long) jsonObject.get("age");
        JSONArray msg = (JSONArray) jsonObject.get("messages");
        System.out.println("Name:"+name);
        System.out.println("Age:"+age);
        System.out.println("Messages:");
        Iterator<String> iterator = msg.iterator();
        while (iterator.hasNext()) {
        System.out.println(iterator.next());
        }

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (ParseException e) {
        e.printStackTrace();
    }
海新霁
2023-03-14

您可以使用此链接为您的回复创建POGO类。它会自动为您的响应生成类。

使用谷歌GSON库解析您的响应。

刘意
2023-03-14

最简单的方法可能是使用Jackson的树模型,遍历它。比如:

JsonNode root = mapper.readValueAsTree(jsonInput);
Map<String,String> flat = new HashMap<String,String>();
traverse(root, flat);

public void traverse(JsonNode node, Map<String,String> result)
{
   Iterator<Map.Entry<String,JsonNode>> it = node.fields();
   while (it.hasNext()) {
     Map.Entry<String,JsonNode> entry = it.next();
     JsonNode n = entry.getValue();
     if (n.isObject()) { // if JSON object, traverse recursively
       traverse(n);
     } else { // if not, just add as String
       result.put(entry.getKey(), n.asText());
     }
   } 
}

你会得到一张可以打印的地图。

 类似资料:
  • 问题内容: 将字符串表示形式转换为对象,但我要相反。对象要转换为JSON字符串,我有一个链接http://www.devcurry.com/2010/03/convert- javascript-object-to-json.html, 但是它需要json2.js jQuery是否具有本机功能方法来做到这一点? 问题答案: jQuery只会在调用本机浏览器方法之前进行一些正则表达式检查。如果不可用

  • 问题内容: 如何使用JavaScript(或jQuery)将描述对象的字符串转换为JSON字符串? 例如:转换这个( 不是 有效的JSON字符串): 到这个: 如果可能,我希望避免使用。 问题答案: 如果字符串是来自可靠来源 ,你可以使用然后的结果。像这样: 请注意,当您使用对象文字时,必须将其括在圆括号中,否则将花括号解析为块而不是对象。 我也同意以下问题的评论,那就是最好以有效的JSON开始编

  • 问题内容: 您如何使JS认为字符串是JSON? 我有一个仅在将JSON对象传递给它的情况下才起作用的函数。如果我以与JSON相同的格式将字符串传递给它,则它将不起作用。因此,我想让该函数认为传递给它的字符串是JSON。该字符串确实采用JSON格式。 我还尝试了以下方法。我通过Ajax输入了字符串,参数“ handle as”为“ JSON”,然后将结果传递给函数。 所以我推断出问题不在弦上。如何将

  • 我有一个RestController类,它有一个方法可以根据电影的标题搜索电影: 如果我发送一个json字符串 从邮递员到endpoint,我收到一个空白的回复。 然后我做了一个 就在进入方法后找到字符串filmSearch正是我从邮递员发送的JSON字符串。我的应用程序没有看到JSON和提取值从filmSearch在我的请求附加到应用程序内字符串filmSearch. 如果我移除 在请求映射的一

  • 问题内容: 如何将String转换为Map: 预期产量: 问题答案: 无需重新发明轮子。Google Guava库提供了该类。 这是如何与一些测试代码一起使用的:

  • 问题内容: 如果我用以下方法在JS中定义了一个对象: 如何将对象转换为JSON?输出字符串应为: 问题答案: 当前所有的浏览器都内置了本机JSON支持。因此,只要您不使用IE6 / 7之类的史前浏览器,就可以像这样轻松地做到这一点: