Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
转换LinkedHashMap<;字符串,字符串>;在Java中创建一个对象_Java_Json_Jaxb_Jax Rs - Fatal编程技术网

转换LinkedHashMap<;字符串,字符串>;在Java中创建一个对象

转换LinkedHashMap<;字符串,字符串>;在Java中创建一个对象,java,json,jaxb,jax-rs,Java,Json,Jaxb,Jax Rs,我将直接从我的问题开始,稍后我将提供更多的背景信息 Simple:我有一个LinkedHashMap,它代表一个特定的对象。 将其转换为该对象的最佳方式是什么 我知道您可以使用泛型遍历所有元素并设置字段,但是嵌套对象是什么呢 Background:我有一个使用JSON对象的JAX-RS服务。我的服务处理不同类型的对象,只表示一个接口。所以我不知道哪些对象来自外部,哪些程序正在使用我的服务 在运行时,我通过界面上的@Inject获取信息。JAX-RS服务将来自客户机的数据存储在一个非类型化的对象中

我将直接从我的问题开始,稍后我将提供更多的背景信息

Simple:我有一个
LinkedHashMap
,它代表一个特定的对象。 将其转换为该对象的最佳方式是什么

我知道您可以使用泛型遍历所有元素并设置字段,但是嵌套对象是什么呢

Background:我有一个使用JSON对象的JAX-RS服务。我的服务处理不同类型的对象,只表示一个接口。所以我不知道哪些对象来自外部,哪些程序正在使用我的服务

在运行时,我通过界面上的
@Inject
获取信息。JAX-RS服务将来自客户机的数据存储在一个非类型化的对象中,并自动完成(即
LinkedHashMap

在我的界面中,我想提供一个类似于
setObject
的方法,参数应该是该类型的对象。我可以处理所有这些,但不能处理将对象
LinkedHashMap
转换为特定对象的部分

示例结构: 目标对象可能是这样的

public class Document {
    private String title;
    private String id;
    private int version;
}
{title=some title, id=1, version=1}
LinkedHashMap
看起来是这样的

public class Document {
    private String title;
    private String id;
    private int version;
}
{title=some title, id=1, version=1}

反射是设置通用未知对象属性的唯一方法。

您可以在文档中找到所需的所有内容。

您可以创建两个类

@XmlAccessorType(XmlAccessType.FIELD) 
public class Document {
    @XmlElement
    private String title;
    @XmlElement
    private String id;
    @XmlElement
    private int version;
}  


@XmlAccessorType(XmlAccessType.FIELD)
public class MapJson {
    @XmlElement
    private LinkedHashMap<String, String> documents; 
}  
谷歌JSON

new com.google.gson.Gson().toJson(instanceofMapJson);  

另外,使用google json,您可以从类中删除xml注释

您在google上搜索过库以帮助从json转换为Java对象吗?你不可能独自一人想要这样做。为什么你不能直接使用
HashMap
?使用HashMap有什么好处@mercutio@DuncanJones我的问题是我已经将JSON转换成Java了,这是在JAX-RS中自动完成的。但是在检索信息时,我没有关于后面对象的信息。因此,拥有一个表示这个LinkedHashmap的对象是可以的。嗯,好吧,但是我如何以性能的方式处理嵌套对象呢?反射不是为性能而设计的。您可以尝试在(包含)
setObject
方法的(应用程序)中缓存对象的(类)变量->方法映射,这将消除每次迭代对象的属性/方法的需要,但仍然会(相对)缓慢。对于动态方法调用,您无能为力—它太慢了。您知道是否有库可以帮助我设置对象吗?请从头开始—查看JAXB(),我尝试了反射,最后使用Gson映射我的对象。处理嵌套对象可能会很混乱……我还考虑过使用JAX-RS使用的相同方法执行反向封送处理。我非常喜欢Gson,但就我的情况而言,我希望有一个JAX-RS标准方式,以便在应用服务器jackson或任何其他JAX-RS实现上使用。有办法吗?我现在正在使用Gson,但我仍然期待一种不依赖于库的方式。