2017-06-22 8 views
0

以下は、解析しようとしているjsonファイルです。すべてのキーと対応する値を出力します。Javaを使用して入れ子になった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(); 
     } 
    } 
} 

私が読んだのstuffsを誰も私はすべてのキーと対応する値を印刷したいwant.I方法のように作業していません。

+0

私は次のように例外を取得しています – gba

+0

出力例を追加してください: –

+0

にjava.lang.ClassCastException:私はちょうどのために(キーをプリントしたいorg.json.simple.JSONArrayがorg.json.JSONObject –

答えて

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 
      } 
     } 
    } 
} 

出力例:

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")); 
} 

は今、あなたは私の最初の行 "の文字列jsonStr = ..." を置き換えることができます:あなたはあなたの例で行ったように

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" 
+0

ありがとうたくさんあります。しかし、JSONファイルは動的です。どのように私はjsonファイルを更新するたびに文字列に変換できますか? –

+0

これはあなたがこのパスに従うことができます:https://stackoverflow.com/a/4716521/575643;) –

+0

私は答えを一瞬編集します... –

1

はorg.json使い方あなたのファイルリーダーで。

関連する問題