【发布时间】:2021-07-10 10:22:41
【问题描述】:
这就是我作为 json 所拥有的,我在这里有一个条件可以忽略具有 object_name:[parent] 的对象,我尝试了一些没有成功的东西,有人可以帮助我吗
[
{
"object_group": "Trans",
"permission_values": [
{
"object_type": "Trans",
"permission_type": [
{
"View": true
}
],
"object_name": [
"Invoice"
]
},
{
"object_type": "Trans",
"permission_type": [
{
"View": true
}
],
"object_name": [
"parent"
]
}
]
},
{
"object_group": "General",
"permission_values": [
{
"object_type": "General",
"permission_type": [
{
"View": true
}
],
"object_name": [
"Customer"
]
},
{
"object_type": "General",
"permission_type": [
{
"Delete": true
}
],
"object_name": [
"Product"
]
}
]
}
]
这是我尝试过的实际事情,因为我在这里有一个条件可以忽略具有 object_name 的对象:[parent]
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import org.json.JSONArray;
import org.json.JSONObject;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
public class TestData {
public static void main(String[] args) throws JsonMappingException, JsonProcessingException {
String input = "{\"JSON_OBJECT\":[{\"object_type\":\"Trans\",\"permission_type\":[{\"View\":true}],\"object_name\":[\"Invoice\"]},{\"object_type\":\"General\",\"permission_type\":[{\"View\":true}],\"object_name\":[\"Customer\"]},{\"object_type\":\"Trans\",\"permission_type\":[{\"View\":true}],\"object_name\":[\"Payments\"]},{\"object_type\":\"General\",\"permission_type\":[{\"Delete\":true}],\"object_name\":[\"Product\"]}]}";
ObjectMapper objectMapper = new ObjectMapper();
JsonNode jsonNode = objectMapper.readTree(input);
Iterator<JsonNode> jsonObject = jsonNode.get("JSON_OBJECT").iterator();
ObjectNode objectNode = objectMapper.createObjectNode();
while (jsonObject.hasNext()) {
JsonNode node = jsonObject.next();
String object_type = node.path("object_type").asText();
if (objectNode.has(object_type)) {
JsonNode objectTypeNode = objectNode.get(object_type);
JsonNode permission_values = objectTypeNode.path("permission_values");
if (!permission_values.isMissingNode()) {
ObjectNode permissionNode = objectMapper.createObjectNode();
node.fields().forEachRemaining(kv -> permissionNode.set(kv.getKey(),kv.getValue()));
((ArrayNode) permission_values).add(permissionNode);
} else {
ObjectNode permissionNode = objectMapper.createObjectNode();
node.fields().forEachRemaining(kv -> permissionNode.set(kv.getKey(),kv.getValue()));
((ArrayNode) permission_values).add(permissionNode);
}
} else {
ArrayNode permissionArrayNode = objectMapper.createArrayNode();
ObjectNode permissionNode = objectMapper.createObjectNode();
node.fields().forEachRemaining(kv -> permissionNode.set(kv.getKey(),kv.getValue()));
permissionArrayNode.add(permissionNode);
ObjectNode permNode = objectMapper.createObjectNode();
permNode.set("permission_values", permissionArrayNode);
objectNode.set(object_type, permNode);
}
}
ArrayNode arrayNode = objectMapper.createArrayNode();
objectNode.fieldNames().forEachRemaining(key ->{
ObjectNode node = objectMapper.createObjectNode();
node.put("object_group",key);
objectNode.get(key).fields().forEachRemaining(kv -> node.set(kv.getKey(),kv.getValue()));
arrayNode.add(node);
});
System.out.println(arrayNode.toString());
}
}
预期输出:- 有人可以帮我得到这个输出..
[
{
"object_group": "Trans",
"permission_values": [
{
"permission_type": [
{
"View": true
}
],
"object_name": [
"Invoice"
]
}
]
},
{
"object_group": "General",
"permission_values": [
{
"permission_type": [
{
"View": true
}
],
"object_name": [
"Customer"
]
},
{
"permission_type": [
{
"Delete": true
}
],
"object_name": [
"Product"
]
}
]
}
]
【问题讨论】:
-
我希望从事我使用的支付工具的程序员永远不会从这些应用程序的模型中分享 json 结构......为了用户的安全,最好清理你的 JSON 示例
-
这是 dummy json ,不用担心 .. 我在正式发布任何内容时都会采取预防措施
标签: java arrays json hashmap multimap