简体   繁体   English

无法打印json数组形式json文件的所有键和值

[英]can not print all the key and values of json array form json file

i am new to json and i have google a lot but can't find the solution. 我是json的新手,但我在Google上有很多,但找不到解决方案。

this is my json file 这是我的json文件

{
    "id": 1,
    "firstname": "Katerina",
    "languages": [
        {
          "lang": "en",
          "knowledge": "proficient"
        },
        {
          "lang": "fr",
          "knowledge": "advanced"
        }
    ]
}

i want to get the key and values of language arrays and print them like below: 我想获取语言数组的键和值,并按如下所示打印它们:

key is: lang and value is: en
key is: knowledge and value is: proficient
key is: lang and value is: fr
key is: knowledge and value is: advanced

I used the below code to print: 我使用以下代码进行打印:

JSONParser parser = new JSONParser();
File file = new File("/Users/amzadhossain/Documents/jsonfile2.json");
FileReader reader = new FileReader(file);
JSONObject jsonObject = (JSONObject) parser.parse(reader);

JSONArray languages = (JSONArray) jsonObject.get("languages");

Map<String,String> map = new HashMap<String,String>();
List<Map<String, String>> lstmap = new ArrayList<Map<String, String>>();

Iterator<String> iter = null;
Iterator<String> iter2 = null;

for (int i =0; i<languages.size();i++){

    JSONObject firstarr = (JSONObject) languages.get(i);

    iter = firstarr.keySet().iterator();
    iter2 = firstarr.values().iterator();

    while(iter.hasNext()){
        String key = (String)iter.next();
        //String value = firstarr.toJSONString();
        String value = (String)iter2.next();

        map.put(key,value);
        lstmap.add(i, map);
        System.out.println(i+" *****  "+key + "#### " + map.get(key));

    }

}

for(int i=0;i<lstmap.size();i++){

    Map<String,String> mapget = lstmap.get(i);

    for (Map.Entry<String, String> entry : mapget.entrySet()) {
        System.out.println("Key : " + entry.getKey() + " Value : " + entry.getValue());
    }   
}

But the problem is it is only printing the last key and values.please help.I want to solve this only by using json simple. 但是问题是它只打印了最后一个键和值。请帮助。我只想通过使用json simple来解决这个问题。

check below code. 检查下面的代码。

final JSONParser parser = new JSONParser();
final File file = new File("/Users/amzadhossain/Documents/jsonfile2.json");
final FileReader reader = new FileReader(file);
final JSONObject jsonObject = (JSONObject) parser.parse(reader);
final JSONArray languages = (JSONArray) jsonObject.get("languages");
List<Map<String, String>> lstmap = new ArrayList<Map<String, String>>();
        Iterator<String> iter = null;
        for (int i = 0; i < languages.size(); i++) {
            JSONObject firstarr = (JSONObject) languages.get(i);
            iter = firstarr.keySet().iterator();            
            while(iter.hasNext()){
                final Map<String, String> map = new HashMap<String, String>();
                String key = (String)iter.next();
                Object value = firstarr.get(key); 
                map.put(key, value.toString());
                lstmap.add(map);
               System.out.println("key is "+key + " and value is " + value);
            }

        }
        for (Map<String, String> map : lstmap){
            for (Map.Entry<String, String> entry : map.entrySet()) {
                System.out.println("Key : " + entry.getKey() + " Value : " + entry.getValue());
            }
        }

This might help you, 这可能对您有帮助,

  for(int i =0; i<languages.length();i++){

            lstmap = new ArrayList<Map<String, Object>>();
            JSONObject firstarr = (JSONObject) languages.get(i);
            iter = firstarr.keySet().iterator();            
            while(iter.hasNext()){
                String key = (String)iter.next();
                Object value = firstarr.get(key);             
               System.out.println("key is "+key + "and value is " + value);
            }
        }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM