2016-07-26 13 views
0

ネストされたjsonファイルを読み込もうとしています。ネストしたjsonのすべての列名を取得しています

このjsonファイルにすべての列名を格納する方法はありますか。 TestData.jsonの

class ReadData { 
    public static void main(String args[]) throws Exception{ 

     SparkConf conf = new SparkConf().setAppName("Search").setMaster("local[*]"); 
     JavaSparkContext sc= new JavaSparkContext(conf); 
     SQLContext sqlContext = new org.apache.spark.sql.SQLContext(sc); 
     DataFrame df1 = sqlContext.read().json("TestData.json"); 
     df1.printSchema(); 
     String columns[]=df1.columns(); 
     int total_columns=columns.length; 
     System.out.println("column names :"); 
     for(int i=0;i<total_columns;i++){ 
      System.out.println(columns[i]); 
     } 
    } 

内容:

{ 
    "id":"1", 
    "name": { 
     "first_name":"Joe", 
     "last_name":"Thomas" 
    } 
} 

私のコードの出力:

column names : 

id 
name 

期待出力は次のとおりです。ここで

column names : 
id 
name.first_name 
name.last_name 
+0

は素晴らしいことだろうあなたは期待される出力を得ます。適切な入力がなければ、コミュニティーは入力と出力を予測することはほとんど不可能です。 –

+0

サミュエルさんに感謝してくれてありがとうございます。 jsonファイルの内容は次のとおりです。{"id": "1"、 "name":{"first_name": "Joe"、 "last_name": "Thomas"}} .first_nameとname.last_name – PShah

+0

また、これまでに何を試してみましたか、何が必要なものを得るのを妨げていますか?私たちはあなたのためにそれを修正することができますので、あなたのコードを投稿して私たちと共有することができれば感謝します –

答えて

0

はに可能な解決策でありますあなたの問題。私はシナリオのいくつかを処理しようとしましたが、これはトリックを行う必要があります。

package com.controller; 

import java.io.IOException; 
import java.nio.charset.Charset; 
import java.nio.charset.StandardCharsets; 
import java.nio.file.Files; 
import java.nio.file.Paths; 
import java.util.ArrayList; 
import java.util.Iterator; 
import java.util.List; 

import org.json.JSONArray; 
import org.json.JSONObject; 

public class JSONColumnNameExtract { 

static List<String> colNames; 

public static void main(String[] args) { 
    colNames = new ArrayList<String>(); 
    String jsonString = ""; 
    try { 
     jsonString = readFile("C:\\jsonInput.json", 
       StandardCharsets.UTF_8); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    JSONObject mainJObject = new JSONObject(jsonString); 
    Iterator<?> keys = mainJObject.keys(); 
    while (keys.hasNext()) { 
     String key = (String) keys.next(); 
     if (mainJObject.get(key) instanceof JSONArray) { 
      JSONArray array = (JSONArray) mainJObject.get(key); 
      for (int i = 0; i < array.length(); i++) { 
       iterateJSON(array.get(i), key); 
      } 
      continue; 
     } 
     if (mainJObject.get(key) instanceof JSONObject) { 
      iterateJSON(mainJObject.get(key), key); 
     } else { 
      if (!colNames.contains(key)) 
       colNames.add(key); 
     } 
    } 
    for (String colName : colNames) 
     System.out.println(colName); 
} 

private static void iterateJSON(Object object, String key2) { 
    JSONObject jsonObject = ((JSONObject) object); 
    Iterator<?> keys = jsonObject.keys(); 
    String key; 
    while (keys.hasNext()) { 
     key = (String) keys.next(); 
     if (jsonObject.get(key) instanceof JSONArray) { 
      JSONArray array = (JSONArray) jsonObject.get(key); 
      for (int i = 0; i < array.length(); i++) { 
       iterateJSON(array.get(i), key); 
      } 
      continue; 
     } 
     if (jsonObject.get(key) instanceof JSONObject) { 
      iterateJSON(jsonObject.get(key), key2 + "." + key); 
     } else { 
      if (!colNames.contains(key2 + "." + key)) 
       colNames.add(key2 + "." + key); 
      continue; 
     } 
    } 
} 

static String readFile(String path, Charset encoding) throws IOException { 
    byte[] encoded = Files.readAllBytes(Paths.get(path)); 
    return new String(encoded, encoding); 
} 

} 

サンプル入力JSON私が取った:

{ 
    "id":"1", 
    "name":{ 
     "first_name":"Joe", 
     "last_name":"Thomas" 
    }, 
    "address":[ 
     { 
     "first_line":"Joe", 
     "city":{ 
      "city_name":"Bangalore", 
      "city_pin":650659 
     } 
     }, 
     { 
     "first_line":"Joe", 
     "city":{ 
      "city_name":"Bangalore", 
      "city_pin":650659, 
      "city_pin2":65065933 
     } 
     } 
    ] 
} 

出力:あなたは `json`ファイルであるかについてのより多くの情報を提供し、より手の込んだことができれば

address.first_line 
address.city.city_name 
address.city.city_pin 
address.city.city_pin2 
name.last_name 
name.first_name 
id 
関連する問題