मैं एक JSON से निपट रहा हूं जो इस तरह दिखता है: -

{
"key1": {
    "key1.1": {
        "nestedkey1": "something",
        "nestedkey2": "something",
        "nestedkey3": "Something"
    },
    "key1.2": {
        "nestedkey1": "something",
        "nestedkey2": "something",
        "nestedkey3": "Something"
    }
},
"key2": {
    "key2.1": {
        "nestedkey1": "something",
        "nestedkey2": "something",
        "nestedkey3": "Something"
    },
    "key2.2": {
        "nestedkey1": "something",
        "nestedkey2": "something",
        "nestedkey3": "Something"
    }
}...

और मैं सभी चाबियों को नहीं जानता। मैं सभी चाबियाँ प्राप्त करना चाहता हूं ताकि मैं इसमें से एक नक्शा<स्ट्रिंग, ऑब्जेक्ट> बना सकूं। वह नक्शा कुछ इस तरह दिखना चाहिए ("key1" -> संबंधित वस्तु)...

जावा में ऐसा करने का कोई आसान तरीका है?

0
ABHILASHA 22 सितंबर 2020, 17:06

2 जवाब

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

जैक्सन JSON लाइब्रेरी का उपयोग करके, इस json को TypeReference का उपयोग करके Map<String, Object> के रूप में पार्स किया जा सकता है:

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.Map;

public class JsonTest {

    public static void main(String[] args) throws JsonProcessingException {
        String json = "{\n"
                + "\"key1\": {\n"
                + "    \"key1.1\": {\n"
                + "        \"nestedkey1\": \"something\",\n"
                + "        \"nestedkey2\": \"something\",\n"
                + "        \"nestedkey3\": \"Something\"\n"
                + "    },\n"
                + "    \"key1.2\": {\n"
                + "        \"nestedkey1\": \"something\",\n"
                + "        \"nestedkey2\": \"something\",\n"
                + "        \"nestedkey3\": \"Something\"\n"
                + "    }\n"
                + "},\n"
                + "\"key2\": {\n"
                + "    \"key2.1\": {\n"
                + "        \"nestedkey1\": \"something\",\n"
                + "        \"nestedkey2\": \"something\",\n"
                + "        \"nestedkey3\": \"Something\"\n"
                + "    },\n"
                + "    \"key2.2\": {\n"
                + "        \"nestedkey1\": \"something\",\n"
                + "        \"nestedkey2\": \"something\",\n"
                + "        \"nestedkey3\": \"Something\"\n"
                + "    }\n"
                + "}}"; // make sure the json is valid and closing } is available

        ObjectMapper mapper = new ObjectMapper();

        Map<String, Object> map = mapper.readValue(json, new TypeReference<>() {});

        System.out.println(map);
    }
}

सभी कुंजियों की सूची प्राप्त करने के लिए, शीर्ष-स्तरीय मानचित्र की प्रविष्टियों पर पुनरावृति करने और कुंजियाँ जोड़ने के लिए एक पुनरावर्ती विधि को लागू करने की आवश्यकता है:

public static List<String> getKeys(Map<String, Object> map) {
    List<String> keys = new ArrayList<>();
    for (Map.Entry<String, Object> entry : map.entrySet()) {
        keys.add(entry.getKey());
        if (entry.getValue() instanceof Map) {
            Map<String, Object> nested = (Map<String, Object>) entry.getValue();
            keys.addAll(getKeys(nested));
        }
    }
    return keys;
}

इसी तरह, "उपसर्ग" कुंजियों की एक सूची बनाई जा सकती है:

public static List<String> getPrefixedKeys(String prefix, Map<String, Object> map) {
    List<String> keys = new ArrayList<>();
    for (Map.Entry<String, Object> entry : map.entrySet()) {
        String key = prefix + entry.getKey();
        keys.add(key);
        if (entry.getValue() instanceof Map) {
            Map<String, Object> nested = (Map<String, Object>) entry.getValue();
            keys.addAll(getPrefixedKeys(key + "/", nested));
        }
    }
    return keys;
}

// test
System.out.println(getPrefixedKeys("/", map));

आउटपुट:

[/key1, /key1/key1.1, /key1/key1.1/nestedkey1, /key1/key1.1/nestedkey2, /key1/key1.1/nestedkey3, 
/key1/key1.2, /key1/key1.2/nestedkey1, /key1/key1.2/nestedkey2, /key1/key1.2/nestedkey3, 
/key2, /key2/key2.1, /key2/key2.1/nestedkey1, /key2/key2.1/nestedkey2, /key2/key2.1/nestedkey3, 
/key2/key2.2, /key2/key2.2/nestedkey1, /key2/key2.2/nestedkey2, /key2/key2.2/nestedkey3]
1
Alex Rudenko 22 सितंबर 2020, 17:59

String filePath ="src/main/resources/json/1.json";
FileReader reader = new FileReader(filePath);

JSONParser parser = new JSONParser();
JSONObject jsonObject = (JSONObject) parser.parse(reader);

Set<String> setKeys= jsonObject.keySet();
Map<String,Object> yourMap= new HashMap<>();
for (String key:setKeys) {
yourMap.put(key,jsonObject.get(key));
}

आपका नक्शा तैयार है!

1
Микола Скоробагатий 23 सितंबर 2020, 10:17