将深层嵌套的json转换为java对象,反之亦然

编程入门 行业动态 更新时间:2024-10-27 10:21:15
本文介绍了将深层嵌套的json转换为java对象,反之亦然的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我正在使用JAXB将我的json转换为java对象。我面临的问题是它导致我创建了大量的类,除了充当json标签的占位符之外没有任何用处。

I am using JAXB for my json conversion to java object. The problem I am facing is that it leads me to create huge number of classes which serves no purpose except acting as a place holder for json tags.

例如:考虑以下json:

For example: Consider below json:

{ "proposalAggregation": { "Buys": { "Heading1": { "key1": "value1", "key2": "value2", "key3": "value3" }, "Heading2": { "key1": "value1", "key2": "value2", "key3": "value3" } }, "Sells": { "Heading1": { "key1": "value1", "key2": "value2", "key3": "value3" }, "Heading2": { "key1": "value1", "key2": "value2", "key3": "value3" } }, "TAChanges": { "Heading1": { "key1": "value1", "key2": "value2", "key3": "value3" }, "Heading2": { "key1": "value1", "key2": "value2", "key3": "value3" } }, "Existing": { "Heading1": { "key1": "value1", "key2": "value2", "key3": "value3" }, "Heading2": { "key1": "value1", "key2": "value2", "key3": "value3" } }, "Proposed": { "Heading1": { "key1": "value1", "key2": "value2", "key3": "value3" }, "Heading2": { "key1": "value1", "key2": "value2", "key3": "value3" } }, "PIAChanges": { "Heading1": { "key1": "value1", "key2": "value2", "key3": "value3" }, "Heading2": { "key1": "value1", "key2": "value2", "key3": "value3" } } }

}

现在要将此JSON反序列化为java对象,这些是我需要创建的java类: / p>

Now to deserialize this JSON as-is to java object these are the java classes i need to create:

Class ProposalAggregation --> this contains Buys, sells, existing, porposed,TAChanges, PIA Class Buys extends Calculation Class Sells extends Calculation Class Existing extends Calculation Class proposed extends Calculation Class TAChanges extends Calculation Class PIAChanges extends Calculation Class Calculation -- > this contains heading1 and heading2 class Heading1 Class Heading2

因此总共有9个类可以模仿JSON以上,如果我们看一下这些类的作用,它们只不过是JSON标记的占位符。 有没有简单的方法?

So in total 9 classes to mimic above JSON and if we looks at the role of these classes they are nothing but place holders for JSON tags. Is there any easy way for this ?

推荐答案

您可以通过以下方式实施Google的GSON库。已经显示了样本类,您可以进一步修改它。

You can implement Google's GSON library in following manner. Have shown with a sample class, you can modify it further.

类 - ProposalAggregation

package com.test; import java.util.Map; public class ProposalAggregation { private Map<String, Map<String, String>> Buys; private Map<String, Map<String, String>> Sells; private Map<String, Map<String, String>> TAChanges; public Map<String, Map<String, String>> getBuys() { return Buys; } public void setBuys(Map<String, Map<String, String>> buys) { Buys = buys; } public Map<String, Map<String, String>> getSells() { return Sells; } public void setSells(Map<String, Map<String, String>> sells) { Sells = sells; } public Map<String, Map<String, String>> getTAChanges() { return TAChanges; } public void setTAChanges(Map<String, Map<String, String>> tAChanges) { TAChanges = tAChanges; } public String toString() { return "BUYS=" + this.Buys + " \nSELLS=" + this.Sells + " \nTACHANGES=" + this.TAChanges; }

}

测试主类 请注意,我修改了 key 名称只是为了验证转换是否正确。

Test main class Note that I have modified key names just to verify the conversion is correct.

package com.test; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import com.google.gson.Gson; public class TestClass { public static void main(String[] args) { Gson gson = new Gson(); try { String jsonString = " { 'Buys': { 'bHeading1': { 'bkey1': 'value1', 'bkey2': 'value2', 'bkey3': 'value3' }, 'bbHeading2': { 'bbkey1': 'value1', 'bbkey2': 'value2', 'bbkey3': 'value3' } }, " + "'Sells': { 'sHeading1': { 'skey1': 'value1', 'skey2': 'value2', 'skey3': 'value3' }, 'ssHeading2': { 'sskey1': 'value1', 'sskey2': 'value2', 'sskey3': 'value3' } }, " + "'TAChanges': { 'Heading1': { 'key1': 'value1', 'key2': 'value2', 'key3': 'value3' }, 'Heading2': { 'key1': 'value1', 'key2': 'value2', 'key3': 'value3' } }, 'Existing': { 'Heading1': { 'key1': 'value1', 'key2': 'value2', 'key3': 'value3' }, 'Heading2': { 'key1': 'value1', 'key2': 'value2', 'key3': 'value3' } }, 'Proposed': { 'Heading1': { 'key1': 'value1', 'key2': 'value2', 'key3': 'value3' }, 'Heading2': { 'key1': 'value1', 'key2': 'value2', 'key3': 'value3' } }, 'PIAChanges': { 'Heading1': { 'key1': 'value1', 'key2': 'value2', 'key3': 'value3' }, 'Heading2': { 'key1': 'value1', 'key2': 'value2', 'key3': 'value3' } } }"; // convert to java class ProposalAggregation obj = gson.fromJson(jsonString, ProposalAggregation.class); System.out.println("OBJECT : " + obj); // convert to json String jsonStringFromObj = gson.toJson(obj); System.out.println("JSON : " + jsonStringFromObj); } catch (Exception e) { e.printStackTrace(); } } }

这是输出。

OBJECT : BUYS={bHeading1={bkey1=value1, bkey2=value2, bkey3=value3}, bbHeading2={bbkey1=value1, bbkey2=value2, bbkey3=value3}} SELLS={sHeading1={skey1=value1, skey2=value2, skey3=value3}, ssHeading2={sskey1=value1, sskey2=value2, sskey3=value3}} TACHANGES={Heading1={key1=value1, key2=value2, key3=value3}, Heading2={key1=value1, key2=value2, key3=value3}} JSON : {"Buys":{"bHeading1":{"bkey1":"value1","bkey2":"value2","bkey3":"value3"},"bbHeading2":{"bbkey1":"value1","bbkey2":"value2","bbkey3":"value3"}},"Sells":{"sHeading1":{"skey1":"value1","skey2":"value2","skey3":"value3"},"ssHeading2":{"sskey1":"value1","sskey2":"value2","sskey3":"value3"}},"TAChanges":{"Heading1":{"key1":"value1","key2":"value2","key3":"value3"},"Heading2":{"key1":"value1","key2":"value2","key3":"value3"}}}

更多推荐

将深层嵌套的json转换为java对象,反之亦然

本文发布于:2023-10-30 07:51:14,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1542235.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:嵌套   转换为   对象   json   java

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!