java 中的逗号 spit/delimit jsonnode
Comma spit/delimit jsonnode in java
在下面的场景中循环访问名为 'name' 的逗号分隔 json 节点的最佳方法是什么?
GetStoredValue result =
dataManagerService.getStoredValue(itemId).checkedGet();
JsonNode node = mapper.readTree(result.getStoredString());
if (node.has("name")
&& node.has("price")
&& node.has("sku"))
{
//iterate through comma delimited "name" value and return the dataSources
//node: {"name":"test1,test2", "price":30, "sku":"123123123"}
//return:
//{"name":"test1", "price":30, "sku":"123123123"}
//{"name":"test2", "price":30, "sku":"123123123"}
ComboPooledDataSource dataSource = createDataSource(node);
dataSources.put(itemId, dataSource);
return dataSources.get(itemId);
}
是的,如果您想将单个节点基本上分成两个,String.split
将是显而易见的解决方案。
如果你的目标 class 有一个可以用来创建它的生成器,那可能是最好的,所以你可以这样做:
private List<Product> fromJsonNode(JsonNode node) {
String[] names = node.get("name").textValue().split(",");
// create list of known size
List<Product> products = new ArrayList<>(ids.length);
// these values will remain the same for all products
ProductBuilder builder = Product.builder()
.price(node.get("price").numberValue())
.sku(node.get("sku").textValue());
for (String name : names) {
// just set the name and create the product with it
products.add(builder.name(name).build());
}
return products;
}
在下面的场景中循环访问名为 'name' 的逗号分隔 json 节点的最佳方法是什么?
GetStoredValue result =
dataManagerService.getStoredValue(itemId).checkedGet();
JsonNode node = mapper.readTree(result.getStoredString());
if (node.has("name")
&& node.has("price")
&& node.has("sku"))
{
//iterate through comma delimited "name" value and return the dataSources
//node: {"name":"test1,test2", "price":30, "sku":"123123123"}
//return:
//{"name":"test1", "price":30, "sku":"123123123"}
//{"name":"test2", "price":30, "sku":"123123123"}
ComboPooledDataSource dataSource = createDataSource(node);
dataSources.put(itemId, dataSource);
return dataSources.get(itemId);
}
是的,如果您想将单个节点基本上分成两个,String.split
将是显而易见的解决方案。
如果你的目标 class 有一个可以用来创建它的生成器,那可能是最好的,所以你可以这样做:
private List<Product> fromJsonNode(JsonNode node) {
String[] names = node.get("name").textValue().split(",");
// create list of known size
List<Product> products = new ArrayList<>(ids.length);
// these values will remain the same for all products
ProductBuilder builder = Product.builder()
.price(node.get("price").numberValue())
.sku(node.get("sku").textValue());
for (String name : names) {
// just set the name and create the product with it
products.add(builder.name(name).build());
}
return products;
}