JSON是一个简单的文本数据表示,下面的页面实际上在一个简短的HTML页面中定义了JSON语法http://json.org/。
正如您所看到的基础构建块是对象和数组以及一些数据类型(字符串数字布尔值和空值)。
如果你需要一个哈希映射,你可以采取这样一个事实,即基本对象成员有些字典中键必须是字符串,值是和对象(或者是一个数组,以防止相同的时间间隔费用)。
所以现在你需要提供你自己的业务逻辑来为你的TimeInterval提供一个唯一的字符串表示,它可以解析回使用json的代码上的对象。
比方说,例如,通过分离的TimeInterval所开始和结束的时间价值“ - ”
E,G。你的时间的toString TimeInterval所会像
@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
}
]
}
我想你可以想到其他的实现这一点,只需要记住,输出应该包含足够的数据来解析消费方面的结果。
因此TimeInterval的属性是关键字,Cost是结果Hashmap中的值 –
@naresh kumar yes。 – SanjeevGhimire
将一些复杂对象作为映射关键字是一种不好的做法。 –