मेरे पास JSON प्रतिक्रिया कुछ इस तरह है:

{
  "id_list":["123", "456", "789"],
  ...
}

मैं सोच रहा था कि अगर मैं ऐसी आईडी सूची को पढ़ने के लिए ऑब्जेक्ट नोड का उपयोग करना चाहता हूं और उदाहरण के लिए आईडी की सूची वापस करना चाहता हूं तो मुझे क्या करना चाहिए।

मैंने इसे इस तरह करने की कोशिश की:

List<String> sendBookIds = asStream(objectMapper.readValue(on.get("bookIds"), new TypeReference<List<String>>(){}))
                .map(JsonNode::asText)
                .flatMap(bookIds -> idResolver.fetchBookIds(bookIds).stream())
                .distinct()
                .collect(Collectors.toList());

लेकिन मुझे यह त्रुटि हो रही है:

Cannot resolve method 'readValue(com.fasterxml.jackson.databind.JsonNode, anonymous com.fasterxml.jackson.core.type.TypeReference<java.util.List<java.lang.String>>

किसी को पता है कि क्या कोई जादू लापता आदेश है? अगर नहीं तो फिर उपाय क्या है?

0
user9347049 26 अगस्त 2021, 11:16

2 जवाब

सबसे बढ़िया उत्तर

मुझे इसे करने का एक तरीका मिला। सबसे पहले मैंने स्ट्रिंग्स की सूची में JsonNode से आईडी एकत्र की:

 List<String> sendBookIds = asStream(on.get("bookIds"))
                .map(JsonNode::asText)
                .collect(Collectors.toList());

और फिर फ़ंक्शन में पैरामीटर के रूप में बस सूची को जोड़ा:

Set<String> resolvedId = bookIdResolver.fetchBookIds(bookIds);

जादू की तरह काम करता है!

0
user9347049 26 अगस्त 2021, 20:03

आप अपनी "id_list" प्रॉपर्टी को JsonNode नोड में और फिर कस्टम ObjectReader पाठक इसे एक List<String> सूची में क्रमबद्ध करते हैं:

JsonNode node = mapper.readTree(json).get("id_list");
ObjectReader reader = mapper.readerFor(new TypeReference<List<String>>(){});
//the list will be ["123", "456", "789"]
List<String> idList = reader.readValue(node); 
0
dariosicily 26 अगस्त 2021, 12:10