我使用Jackson从/向json文件读取/写入数据,我遇到了用户POJO的问题。它有一个Map应该是联系用户的方式(所以它可以有0到7,具体取决于Enum)。我希望能够使用JSF中的表单设置联系方式。
我试过value="#{config.user.contacts[EMAIL_PRO]}"
之类的东西
当然EMAIL_PRO是一个Enum(后来,用户应该能够自己选择Enum,但是现在我尝试简单)。
但是当我这样做时,错误是
JSON中不允许使用地图的空键
我明白了,因为我的调试说返回的值是{null = null}
。现在第一个问题:由于地图是空的,JSF应该像那样工作吗?关键" EMAIL_PRO"还没有存在,但JSF不应该为我完成工作,并用密钥输入正确的值吗?
另一个问题是关于杰克逊和地图的更多问题。正如我所说,我的POJO用户包含一个Map,而json文件是一个Map本身(包含多个用户)。
是否真的可以使用杰克逊将地图写入此文件,其中地图为Map<String, Object>
而对象包含Map<Enum, Object>
?如果是的话,怎么样?
感谢您的帮助
PS:我不能改变我的API或我的POJO。
答案 0 :(得分:0)
我认为这是一个重复的帖子,请参阅How to convert hashmap to JSON object in Java
正如其中一个回复所说:
Map<String, Object> data = new HashMap<String, Object>();
data.put( "name", "Mars" );
data.put( "age", 32 );
data.put( "city", "NY" );
JSONObject json = new JSONObject();
json.putAll( data );
System.out.printf( "JSON: %s", json.toString(2) );
输出:
JSON: {
"age": 32,
"name": "Mars",
"city": "NY"
}
您也可以尝试使用Google的GSON.Google的GSON是将Java对象转换为JSON表示的最佳库