Jackson JSON: json-tree에서 노드 이름 가져오기
Jackson을 사용하여 JSON 트리에서 노드 이름을 수신하려면 어떻게 해야 합니까?JSON-File은 다음과 같습니다.
{
node1:"value1",
node2:"value2",
node3:{
node3.1:"value3.1",
node3.2:"value3.2"
}
}
있습니다
JsonNode rootNode = mapper.readTree(fileReader);
그런 게 필요해요
for (JsonNode node : rootNode){
if (node.getName().equals("foo"){
//bar
}
}
감사해요.
잭슨 2+의 경우(com.fasterxml.jackson
)의 방법은 조금 다릅니다.
Iterator<Entry<String, JsonNode>> nodes = rootNode.get("foo").fields();
while (nodes.hasNext()) {
Map.Entry<String, JsonNode> entry = (Map.Entry<String, JsonNode>) nodes.next();
logger.info("key --> " + entry.getKey() + " value-->" + entry.getValue());
}
이 답변은 Jackson 2+ 이전 버전(원래 1.8용으로 작성)에 적용됩니다.Jackson 의 새로운 버전에서 동작하는 버전에 대해서는, @SupunSameera 의 답변을 참조해 주세요.
"node name"의 JSON 용어는 "key"입니다.에는 키가 포함되어 있지 않기 때문에, 다른 방법으로 반복할 필요가 있습니다.
for (Map.Entry<String, JsonNode> elt : rootNode.fields())
{
if ("foo".equals(elt.getKey()))
{
// bar
}
}
키만 표시하면 다음과 같이 간단하게 할 수 있습니다.
for (String key : rootNode.fieldNames())
{
if ("foo".equals(key))
{
// bar
}
}
키가 있는 노드를 찾으려면"foo"
, 직접 액세스 할 수 있습니다.따라서 루프를 사용하는 것보다 더 나은 성능(정시 검색)과 더 깨끗한/깨끗한 코드가 생성됩니다.
JsonNode foo = rootNode.get("foo");
if (foo != null)
{
// frob that widget
}
fields()와 field Names()는 모두 나에게 동작하지 않았다.그리고 나는 키를 반복하는 방법을 찾기 위해 꽤 시간을 들여야 했다.그것을 할 수 있는 두 가지 방법이 있다.
하나는 맵으로 변환하는 것입니다(더 많은 공간을 차지합니다).
ObjectMapper mapper = new ObjectMapper();
Map<String, Object> result = mapper.convertValue(jsonNode, Map.class);
for (String key : result.keySet())
{
if(key.equals(foo))
{
//code here
}
}
다른 하나는 String 반복기를 사용하는 것입니다.
Iterator<String> it = jsonNode.getFieldNames();
while (it.hasNext())
{
String key = it.next();
if (key.equals(foo))
{
//code here
}
}
자세한 내용은 이쪽:
이 방법은 유효하지만:
JsonNode rootNode = objectMapper.readTree(file);
Iterator<Map.Entry<String, JsonNode>> fields = rootNode.fields();
while (fields.hasNext()) {
Map.Entry<String, JsonNode> entry = fields.next();
log.info(entry.getKey() + ":" + entry.getValue())
}
이것은, 이하에 해당하지 않습니다.
JsonNode rootNode = objectMapper.readTree(file);
while (rootNode.fields().hasNext()) {
Map.Entry<String, JsonNode> entry = rootNode.fields().next();
log.info(entry.getKey() + ":" + entry.getValue())
}
그러니까 주의해서 선언해 주세요.Iterator
변수로 사용할 수 있습니다.
반드시 를 사용해 주세요.fasterxml
보다 라이브러리codehaus
.
JsonNode root = mapper.readTree(json);
root.at("/some-node").fields().forEachRemaining(e -> {
System.out.println(e.getKey()+"---"+ e.getValue());
});
한 줄에 잭슨 2+
언급URL : https://stackoverflow.com/questions/7653813/jackson-json-get-node-name-from-json-tree
'programing' 카테고리의 다른 글
Visual Studio 코드 자동 가져오기 (0) | 2023.04.03 |
---|---|
Angular.js : 템플릿에서 ng-href를 사용하는 방법 (0) | 2023.04.03 |
WooCommerce Cart의 특정 제품 속성 및 메타 데이터 에코 (0) | 2023.04.03 |
react - typescript를 사용하여 컨텍스트를 만들 때 네임스페이스 'ctx'를 찾을 수 없습니다. (0) | 2023.04.03 |
고객 일치 배송 구역 삭제..". woocommerce 카트에 있는 메시지 (0) | 2023.04.03 |