从 json 中解组嵌套对象

2023-12-10

我有传入的 JSON 字符串,需要解组为 JAXB 带注释的对象。我正在使用抛弃来做到这一点。 JSON 字符串如下所示:

{ 
  objectA : 
  { 
    "propertyOne" : "some val", 
    "propertyTwo" : "some other val",
    objectB : 
    {
      "propertyA" : "some val",
      "propertyB" : "true" 
    }
  }
}

ObjectA 代码如下所示:

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "objectA")
public class ObjectA {
    @XmlElement(required = true)
    protected String propertyOne;
    @XmlElement(required = true)
    protected String propertyTwo;
    @XmlElement(required = true)
    protected ObjectB objectB;
}

Object 类代码如下所示:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "objectB")
public class ObjectB {
    @XmlElement(required = true)
    protected String propertyA;
    @XmlElement(required = true)
    protected boolean propertyB;
}

用于解组的代码:

JAXBContext jc = JAXBContext.newInstance(OnjectA.class);
JSONObject obj = new JSONObject(theJsonString);
Configuration config = new Configuration();

MappedNamespaceConvention con = new MappedNamespaceConvention(config);
XMLStreamReader xmlStreamReader = new MappedXMLStreamReader(obj,con);
Unmarshaller unmarshaller = jc.createUnmarshaller();

ObjectA obj = (ObjectA) unmarshaller.unmarshal(xmlStreamReader);

它不会引发任何异常或警告。发生的情况是,ObjectB 已实例化,但其所有属性均未设置其值,即 propertyA 为 null,而 propertyB 的默认值为 false。我一直在努力弄清楚为什么这不起作用。有人可以帮忙吗?


Note:我是EclipseLink JAXB (MOXy)领导者和成员JAXB (JSR-222)专家组。

您模型上的 JAXB 映射似乎是正确的。下面是示例代码,其中我使用了问题中给出的确切模型以及通过 EclipseLink MOXy 提供的 JSON 绑定:

Demo

package forum16365788;

import java.io.File;
import java.util.*;
import javax.xml.bind.*;
import org.eclipse.persistence.jaxb.JAXBContextProperties;

public class Demo {

    public static void main(String[] args) throws Exception {
        Map<String, Object> properties = new HashMap<String, Object>(1);
        properties.put(JAXBContextProperties.MEDIA_TYPE, "application/json");
        JAXBContext jc = JAXBContext.newInstance(new Class[] {ObjectA.class}, properties);

        Unmarshaller unmarshaller = jc.createUnmarshaller();
        File json = new File("src/forum16365788/input.json");
        ObjectA objectA = (ObjectA) unmarshaller.unmarshal(json);

        Marshaller marshaller = jc.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        marshaller.marshal(objectA, System.out);
    }

}

输入.json/输出

下面是我使用的 JSON。按键objectA and objectB应该被引用,你的问题中没有这个。

{
   "objectA" : {
      "propertyOne" : "some val",
      "propertyTwo" : "some other val",
      "objectB" : {
         "propertyA" : "some val",
         "propertyB" : true
      }
   }
}

了解更多信息

  • http://blog.bdoughan.com/2011/08/json-binding-with-eclipselink-moxy.html
  • http://blog.bdoughan.com/2011/05/specifying-eclipselink-moxy-as-your.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 json 中解组嵌套对象 的相关文章

随机推荐

  • 如何在分布式环境中存储盐

    我不知道如何在我的场景中使用 盐概念 假设我有一个客户端桌面应用程序 它为特定用户加密数据并将其发送到远程服务器 客户端应用程序使用 PKCS 5 生成密钥 其中包含用户密码和 SALT 远程桌面绝不能接触用户的密码 假设我们为加密生成随机
  • gnuplot x 直方图中的标签位置

    我有以下数据 t 4 24 3 0 0 t 6 37 4 0 0 t 8 51 4 2 0 t 4 15 1 0 0 t 6 21 0 0 1 t 8 30 0 0 1 t 4 13 2 1 0 t 6 20 3 1 0 t 8 22 4
  • 在 PHP 中将“原始”字符串格式化为 Java UUID [重复]

    这个问题在这里已经有答案了 是否有一种更有效 更简单的方法可以在 PHP 中将 格式化 Java UUID 不带破折号 转换为 Java 兼容格式 带破折号 最终 我将如何做到这一点 我已经有执行此操作的代码 但它似乎不专业 我觉得它可能可
  • 语法/智能感知损坏?

    我正在使用 Visual Studio 2010 它似乎突然坏了 我打开了一个解决方案 打开了一个类并添加了 namespace Admin public static class SessionManager public static
  • 使用 Apache FtpClient 计算 FTP 服务器中的文件校验和

    我正在使用 Apache Commons Net 的 FtpClient 将视频上传到 FTP 服务器 为了检查文件是否确实已成功传输 我想计算远程文件的校验和 但不幸的是我发现没有相关的API可以使用 我的问题是 ftp服务器是否需要计算
  • Java JNA sendMessage() 未找到

    我正在尝试使用JNA 概述 当最小化或不在顶部时 例如鼠标单击 向应用程序发送消息 我发现人们正在使用 com sun jna platform win32 User32 发信息A hW 0x0201 0 0 但我在这个类中找不到这个函数
  • 使用 Request.Files["files"] MVC 上传多个文件

    这是我的守则 我想将 3 个文件更新到我的数据库中 首先在视图中我写了这个 这是 3 个文件上传
  • 如何在 .ready() 期间更改文档的标题?

    我在 Ruby on Rails 中使用一些嵌套布局 在其中一个布局中 我需要从 div 中读取字符串并将其设置为文档的标题 设置文档标题的正确方法是什么 如果有 以下内容应该可行 但不兼容 SEO 最好将标题放在标题标签中
  • 在我的应用程序中登录 Facebook/Twitter

    我正在开发我的网站 在我的网站中我希望用户通过他们的登录 社交网络凭据 例如 Facebook 和 Twitter 当这些用户在我的网站上进行任何活动时 我应该如何跟踪他们 假设用户使用 Facebook 用户名和密码登录 现在他被重定向到
  • 最新的 BitTorrent DHT 实施建议是什么?

    我正在努力实现另一个 BitTorrent 客户端 目前正在与 DHT 作斗争 是按照这个规范来实现的http www bittorrent org beps bep 0005 html但开始调试它时 我注意到网络上其他节点的响应有所不同
  • ZF 包含路径

    require once 是否正确 你会在哪里以及如何放置它包含路径 它不应该在 application ini 或 bootstrap 中吗 例子 require once Zend View Helper Abstract php qu
  • C++ std::map 键排序比较函数?

    我有一个类 其中重载了所有比较运算符 我将一堆这些对象作为键加载到地图中 并且我希望地图对它们进行从最小到最大的排序 然而 地图实际上是按从大到小排序的 为什么是这样 当它对映射进行排序时 它是否不使用键上的比较运算符 我怎样才能让它做到这
  • Java/Spring 异步处理 Spring 批处理作业请求

    目前 我在应用程序中公开了一个启动 Spring 批处理作业的休息端点 但是 请求不是异步安排的 作业完成后提供响应 并显示批处理状态MyResponse object RestController RequestMapping test
  • 如何检查 TextView 字符串是否已被修剪(选取框)?

    If a TextView其父元素中没有足够的空间 我将显示一个图标 该文本或图标上的选项卡将用于调用包含完整字符串的警报对话框 所以我需要知道是否TextView已被修剪 计算TextView的宽度并计算将在textview中显示的文本的
  • 使弹性项目换行以创建新列

    我正在 div 中填充元素 并且我想对它们进行排列 如下所示 1 3 2 4 现在 它只是在下降 1 2 3 4 我如何告诉它在 2 个元素之后移动到下一列 parent display flex flex direction column
  • 如何将 hbase 表转储到文本文件中?

    我需要转储 HBase 中的一张表并需要采用文本文件 csv 格式 我寻找scan export and get在 HBase shell 中执行命令 但不起作用 有很多方法可以从 HBase 表中获取数据 例如运行导出映射 归约作业 您可
  • 如何使 VK_LAYER_KHRONOS_validation 可用?

    解决方案 卸载 vulkan 在注册表 HKLM SOFTWARE Khronos Vulkan ExplicitLayers 和 HKLM SOFTWARE WOW6432Node Khronos Vulkan ExplicitLayer
  • 用于创建 Lambda 的 AWS Java SDK 版本

    我正在尝试按照所述指南开发 AWS Java lambda 函数here其中描述了RequestHandler接口 还引用 AWS lambda java core 库 不过 我正在尝试按照推荐使用最新的 SDKhere但这是完全不同的Re
  • 什么样的内存语义控制 C# 中的数组分配?

    鉴于以下情况 字节 数据 和一个声明为的函数私有字节 构造命令 如果我要分配的结果构造命令 to sDatasData 是否只是指向从函数返回的内容 或者是否会在内存中为 sData 分配一些空间 并将函数结果的内容复制到其中 该赋值将简单
  • 从 json 中解组嵌套对象

    我有传入的 JSON 字符串 需要解组为 JAXB 带注释的对象 我正在使用抛弃来做到这一点 JSON 字符串如下所示 objectA propertyOne some val propertyTwo some other val obje