您好我正在使用杰克逊为我的api项目转换为json。我使用的依赖是
<dependency>
<groupId>com.fasterxml.jackson.jaxrs</groupId>
<artifactId>jackson-jaxrs-json-provider</artifactId>
<version>2.4.3</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.13</version>
</dependency>
我有两个班级
TimeInterval和Cost
我需要创建一个地图
Map<TimeInterval, Cost>
将使用jackson提供程序转换为JSON。
它转换得很好,但我得到的关键是toString作为字符串而不是json对象。
感谢任何帮助。
感谢 Sanjeev
答案 0 :(得分:1)
你能详细说明吗? JSON本质上是一个键值对,它们都是字符串或值是数组,docuemnt但是它也将在叶级别的字符串中。
答案 1 :(得分:1)
好的,将两个类转换为HashMap,如
Map<String,Object> map_values = mapper.convertValue(Object(TimeInterval/Cost), Map.class);
根据您的要求构建第三个hashmap。
答案 2 :(得分:0)
JSON是一个简单的数据文本表示,下一页实际上在一个简短的HTML页面http://json.org/中定义了JSON语法。
正如您所看到的,构建块的基础是对象和数组以及一些数据类型(字符串编号为Boolean和null)。
如果你需要一个哈希映射,你可以认为基本对象成员有点像字典,其中键必须是一个字符串,值是和对象(如果相同的时间间隔成本很少,则为数组) )。
所以现在你需要提供自己的业务逻辑来为你的TimeInterval提供一个唯一的字符串表示,可以解析为使用json的代码上的对象。
比方说,以“ - ”分隔的TimeInterval的开始和结束的时间值
E,G。你的时间TimeInterval toString看起来像
@Override
public String toString() {
//start and end are of type Date
return start.getTime()+"-"+end.getTime();
}
现在生成的json看起来像
{
"1420667419892-1420698059892" : {
"ammount" : 10.9,
"currency" : "USD"
},
"1420698059892-1420706699892" : {
"ammount" : 10.9,
"currency" : "ERO"
}
}
但是如果TimeInterval更复杂并且上面的选项不可能。您将需要一些TimeInterval的代理键,然后您将需要创建包含字典和一组或现有IntervalIdToCost的包装对象
public class TimeToCostMapWarpper {
//Map TimeInterval.Id to Cost
Map<String, Cost> intervalIdToCost = new HashMap<>();
Set<TimeInterval> timeIntervals = new HashSet<>();
//getter/setter...
}
现在,您将序列化包装器对象,并将得到类似的内容:
{
"intervalIdToCost" : {
"1f3fe6cf-7afe-4575-b8b2-bbe2067a99bd" : {
"ammount" : 10.9,
"currency" : "ERO"
},
"d2c880ce-ef41-48f8-8f4a-0ff73449e1c3" : {
"ammount" : 10.9,
"currency" : "USD"
}
},
"timeIntervals" : [{
"id" : "1f3fe6cf-7afe-4575-b8b2-bbe2067a99bd",
"start" : 1420702028475,
"end" : 1420710668475
}, {
"id" : "d2c880ce-ef41-48f8-8f4a-0ff73449e1c3",
"start" : 1420693388475,
"end" : 1420702028475
}
]
}
我猜你可以想到其他的实现方法,只需要记住输出应该包含足够的数据来在消费方面轻松解析结果。