Если вы хотите преобразовать json строку в java, вы можете использовать Gson ..
Gson g = new Gson(); yourvenillabean p = g.fromJson(jsonString, yourvanillabean.class)
см. Полный пример здесь
Подробнее здесь
с тех пор, как вы добавили спаг-тег Если я прав, ниже приведен искровой способ обработки json, если вы хотите создать фрейм данных ...
вы можете конвертировать это json в DataFrame, как показано ниже
package examples;
import org.apache.spark.SparkConf;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Encoders;
import org.apache.spark.sql.SparkSession;
import java.util.Arrays;
import java.util.List;
public class JsonDF {
SparkSession sparkSession;
public static void main(String[] args) {
SparkConf conf = new SparkConf();
conf.setMaster("local[2]");
SparkSession spark = SparkSession
.builder()
.appName("Dataset-json")
.master("local[4]")
.getOrCreate();
System.out.println("Session created");
String str = "{\n" +
" \"address\": {\n" +
" \"building\": \"1007\",\n" +
" \"coord\": [\n" +
" -73.856077,\n" +
" 40.848447\n" +
" ],\n" +
" \"street\": \"Morris Park Ave\",\n" +
" \"zipcode\": \"10462\"\n" +
" },\n" +
" \"borough\": \"Bronx\",\n" +
" \"cuisine\": \"Bakery\",\n" +
" \"grades\": [\n" +
" {\n" +
" \"date\": {\n" +
" \"$date\": 1393804800000\n" +
" },\n" +
" \"grade\": \"A\",\n" +
" \"score\": 2\n" +
" },\n" +
" {\n" +
" \"date\": {\n" +
" \"$date\": 1378857600000\n" +
" },\n" +
" \"grade\": \"A\",\n" +
" \"score\": 6\n" +
" },\n" +
" {\n" +
" \"date\": {\n" +
" \"$date\": 1358985600000\n" +
" },\n" +
" \"grade\": \"A\",\n" +
" \"score\": 10\n" +
" },\n" +
" {\n" +
" \"date\": {\n" +
" \"$date\": 1322006400000\n" +
" },\n" +
" \"grade\": \"A\",\n" +
" \"score\": 9\n" +
" },\n" +
" {\n" +
" \"date\": {\n" +
" \"$date\": 1299715200000\n" +
" },\n" +
" \"grade\": \"B\",\n" +
" \"score\": 14\n" +
" }\n" +
" ],\n" +
" \"name\": \"Morris Park Bake Shop\",\n" +
" \"restaurant_id\": \"30075445\"\n" +
"}";
List<String> data = Arrays.asList(str);
Dataset<String> ds = spark.createDataset(data, Encoders.STRING());
spark.read().json(ds).show(false);
}
}
Результат:
+-------------------------------------------------------+-------+-------+-------------------------------------------------------------------------------------------------------------------------------+---------------------+-------------+
|address |borough|cuisine|grades |name |restaurant_id|
+-------------------------------------------------------+-------+-------+-------------------------------------------------------------------------------------------------------------------------------+---------------------+-------------+
|[1007, [-73.856077, 40.848447], Morris Park Ave, 10462]|Bronx |Bakery |[[[1393804800000], A, 2], [[1378857600000], A, 6], [[1358985600000], A, 10], [[1322006400000], A, 9], [[1299715200000], B, 14]]|Morris Park Bake Shop|30075445 |
+-------------------------------------------------------+-------+-------+-------------------------------------------------------------------------------------------------------------------------------+---------------------+-------------+
ОБНОВЛЕНИЕ:
Поскольку вы хотите преобразовать json в java класс, который вы можете использовать это чтобы сделать это с вашей json строкой ...
После преобразования вы можете получить такой класс:
public class Application {
Address AddressObject;
private String borough;
private String cuisine;
ArrayList<Object> grades = new ArrayList<Object>();
private String name;
private String restaurant_id;
// Getter Methods
public Address getAddress() {
return AddressObject;
}
public String getBorough() {
return borough;
}
public String getCuisine() {
return cuisine;
}
public String getName() {
return name;
}
public String getRestaurant_id() {
return restaurant_id;
}
// Setter Methods
public void setAddress( Address addressObject ) {
this.AddressObject = addressObject;
}
public void setBorough( String borough ) {
this.borough = borough;
}
public void setCuisine( String cuisine ) {
this.cuisine = cuisine;
}
public void setName( String name ) {
this.name = name;
}
public void setRestaurant_id( String restaurant_id ) {
this.restaurant_id = restaurant_id;
}
}
public class Address {
private String building;
ArrayList<Object> coord = new ArrayList<Object>();
private String street;
private String zipcode;
// Getter Methods
public String getBuilding() {
return building;
}
public String getStreet() {
return street;
}
public String getZipcode() {
return zipcode;
}
// Setter Methods
public void setBuilding( String building ) {
this.building = building;
}
public void setStreet( String street ) {
this.street = street;
}
public void setZipcode( String zipcode ) {
this.zipcode = zipcode;
}
}
, который совместим с искрой схема, которую вы получили ..
root
|-- address: struct (nullable = true)
| |-- building: string (nullable = true)
| |-- coord: array (nullable = true)
| | |-- element: double (containsNull = true)
| |-- street: string (nullable = true)
| |-- zipcode: string (nullable = true)
|-- borough: string (nullable = true)
|-- cuisine: string (nullable = true)
|-- grades: array (nullable = true)
| |-- element: struct (containsNull = true)
| | |-- date: struct (nullable = true)
| | | |-- $date: long (nullable = true)
| | |-- grade: string (nullable = true)
| | |-- score: long (nullable = true)
|-- name: string (nullable = true)
|-- restaurant_id: string (nullable = true)
Вот пример Как создать Dataframe в искре, который содержит сложные Java Beans