【问题标题】:Checking json fields using json-b api使用 json-b api 检查 json 字段
【发布时间】:2020-11-18 12:33:40
【问题描述】:

我正在使用 json 绑定 API 来解析部署在 Liberty 应用服务器上的应用程序的 json 字符串。

假设我有下面给出的 json 字符串

String message = "{ "color" : "Black", "type" : "BMW" }";

我想遍历 json 字符串并检查应用程序逻辑中的每个 json 属性字段(颜色/类型)以查看它是否包含某些特定字符。

如何使用 json-b (Json Binding API) 来做到这一点

【问题讨论】:

标签: websphere-liberty jsonb-api


【解决方案1】:

这是一个简单的例子:

public class Car {
    public String color;
    public String type;
}

...

Jsonb jsonb = JsonbBuilder.create();
Car car = jsonb.fromJson("{ \"color\" : \"Black\", \"type\" : \"BMW\" }", Car.class);
if (car.color.contains("Bla") || car.type.startsWith("B"))
    System.out.println("Found a " + car.type + " that is " + car.color);
jsonb.close();

【讨论】:

  • 它应该适用于我没有有关字段信息的任何 json 字符串
  • 问题并不清楚。我将添加一个不同的答案,并举例说明如何做到这一点。
【解决方案2】:

根据 JSON-B 规范的第 3.11 节,JSON-B 的实现必须支持绑定到 java.util.LinkedHashMap(以及许多其他标准集合类型),因此如果您不知道什么是字段名称为:

Jsonb jsonb = JsonbBuilder.create();
LinkedHashMap<String, ?> map = jsonb.fromJson("{ \"color\" : \"Black\", \"type\" : \"BMW\" }", LinkedHashMap.class);
for (Map.Entry<String, ?> entry : map.entrySet()) {
    Object value = entry.getValue();
    if (value instanceof String && ((String) value).contains("Black"))
        System.out.println("Found " + entry.getKey() + " with value of " + value + " in " + map);
}

【讨论】:

    猜你喜欢
    • 2020-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多