无法使用java解析嵌套json文件的键和值

问题描述 投票:0回答:2

下面是我试图解析的json文件。我想打印所有键和相应的值。

{
 "A":{
   "name":"Ram",
   "gender":"male",
   "designation":"engineer"
 },
 "B":{
  "name":"Shyam",
  "gender":"male",
  "designation":"student"
 },
 "C":{
  "name":"Mohan",
  "gender":"male",
  "designation":"manager"
 }
} 

我试过以下代码:

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.Iterator;
import org.json.JSONArray;
import org.json.JSONObject;
import org.json.simple.parser.JSONParser;

public class FetchJsonNested {
    public static void main(String args[]) throws FileNotFoundException {
        try {
            JSONParser jp=new JSONParser();
            Object obj=jp.parse(new FileReader("C:\\Users\\DELL\\Documents\\NetBeansProjects\\WaterNetwork\\web\\kusharray.json"));
            JSONObject job=(JSONObject)obj;
            Iterator < ? > keys = job.keys();

            while (keys.hasNext()) {
                String key = (String) keys.next();
                System.out.println(key);
                if (job.get(key) instanceof JSONObject) {
                    System.out.println(job.get(key));
                }
            }
        } catch(Exception e) {
            e.printStackTrace();
        }
    }
}

我从很多网站上读过东西,但没有人像我想要的那样工作。我想打印所有的键和相应的值。

java json
2个回答
0
投票

下面没有关注那个令人敬畏和最优雅的解决方案,但这可以引导您达到您的需求。

import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;

public class Main {

    public static void main(String[] args) throws Exception {
        String jsonString = loadJSONFile();

        JsonElement jsonElement = new JsonParser().parse(jsonString);
        JsonObject jsonObject = jsonElement.getAsJsonObject();

        print(jsonObject);
    }

    private static String loadJSONFile() throws FileNotFoundException {
        Scanner scanner = new Scanner(new FileReader("path/to/the/json/file.ext"));
        StringBuilder stringBuilder = new StringBuilder();

        while (scanner.hasNext()) {
            stringBuilder.append(scanner.next());
        }

        scanner.close();

        return stringBuilder.toString();
    }

    private static void print(JsonObject jsonObject) {
        Set<Map.Entry<String, JsonElement>> entries = jsonObject.entrySet();

        for (Map.Entry<String, JsonElement> entry : entries) {
            System.out.println(entry.getKey() + ": " + entry.getValue());

            try {
                JsonElement jsonElement = new JsonParser().parse(String.valueOf(entry.getValue()));
                JsonObject innerJsonObject = jsonElement.getAsJsonObject();

                print(innerJsonObject);
            } catch (Exception e) {
                // is not a JSON
            }
        }
    }
}

输出示例:

A: {"name":"Ram","gender":"male","designation":"engineer"}
name: "Ram"
gender: "male"
designation: "engineer"
B: {"name":"Shyam","gender":"male","designation":"student"}
name: "Shyam"
gender: "male"
designation: "student"
C: {"name":"Mohan","gender":"male","designation":"manager"}
name: "Mohan"
gender: "male"
designation: "manager"

1
投票

像在示例中一样使用org.json:

String jsonStr = "{\"A\":{\"name\":\"Ram\",\"gender\":\"male\",\"designation\":\"engineer\"},\"B\":{\"name\":\"Shyam\",\"gender\":\"male\",\"designation\":\"student\"},\"C\":{\"name\":\"Mohan\",\"gender\":\"male\",\"designation\":\"manager\"}}";
JSONObject json = new JSONObject(jsonStr);

for (Object key : json.keySet().toArray()){
    JSONObject data = json.getJSONObject(key.toString());
    System.out.println("json :" + data.toString());
    System.out.println("name :" +data.getString("name"));
    System.out.println("gender :" +data.getString("gender"));
    System.out.println("designation :" +data.getString("designation"));
}

现在您可以用文件阅读器替换我的第一行“String jsonStr = ...”。

© www.soinside.com 2019 - 2024. All rights reserved.