我的json看起来像这样:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
func preferredStatusBarStyle() -> UIStatusBarStyle {
return UIStatusBarStyle.lightContent
}
UINavigationBar.appearance().barTintColor = UIColor(red: 252/255.0, green: 140.0/255.0, blue: 90.0/255.0, alpha: 1)
UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName:UIColor.white]
UIToolbar.appearance().barTintColor = UIColor(red: 252/255.0, green: 140.0/255.0, blue: 90.0/255.0, alpha: 1)
UIBarButtonItem.appearance().tintColor = UIColor.white
self.window = UIWindow(frame: UIScreen.main.bounds)
let storyboard = UIStoryboard (name: "Main", bundle: nil)
...
}
我试图使用spring restTemplate将其读入pojo。我目前的情人是: -
{
"bid": "181.57",
"ask": "181.58",
"volume": {
"item1": "543.21",
"item2": "123.45",
"timestamp": 1487903100000
},
"last": "181.58"
}
问题是" item1"和" item2" int json可以改为" item5"和" item6"取决于我要查询的实体。如果我的变量名为item1和item2,我会得到空值。如何保留变量item1和item2的通用名称,并且仍然能够在通用变量中正确读取值?是否有任何注释可以帮助到这里?
答案 0 :(得分:2)
我相信您正在寻找Baeldung tutorial:
3.3。 @JsonAnySetter
@JsonAnySetter允许您灵活地使用Map作为标准属性。在反序列化时,JSON中的属性将简单地添加到地图中。
让我们看看它是如何工作的 - 我们将使用@JsonAnySetter反序列化实体ExtendableBean:
public class ExtendableBean {
public String name;
private Map<String, String> properties;
@JsonAnySetter
public void add(String key, String value) {
properties.put(key, value);
}
}
这是我们需要反序列化的JSON:
{
"name":"My bean",
"attr2":"val2",
"attr1":"val1"
}
这就是这一切如何联系在一起的:
@Test
public void whenDeserializingUsingJsonAnySetter_thenCorrect()
throws IOException {
String json
= "{\"name\":\"My bean\",\"attr2\":\"val2\",\"attr1\":\"val1\"}";
ExtendableBean bean = new ObjectMapper()
.readerFor(ExtendableBean.class)
.readValue(json);
assertEquals("My bean", bean.name);
assertEquals("val2", bean.getProperties().get("attr2"));
}
在您的情况下,您只需在地图中查询您所期望的任何查询所需的字符串值。