2016-07-26 2 views
0

Я пытаюсь прочитать вложенный файл json.Получение всех имен столбцов вложенных json

Можно ли сохранить все имена столбцов в этом 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]); 
     } 
    } 

Содержание TestData.json:

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

Выход моего кода:

column names : 

id 
name 

Ожидаемый результат:

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

будет замечательно, если вы можете предоставить более подробную информацию о том, что находится в 'json' файл и разработать более на вас ожидаемый выход. Без надлежащих входных данных сообщество не может прогнозировать вход и выход. –

+0

Спасибо, Самуэль за ответ. В json-файле есть содержимое: {"id": "1", "name": {"first_name": "Joe", "last_name": "Thomas"}} Мне нужны все имена столбцов json как id, name .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 
     } 
     } 
    ] 
} 

Выход:

address.first_line 
address.city.city_name 
address.city.city_pin 
address.city.city_pin2 
name.last_name 
name.first_name 
id 
Смежные вопросы