Die Anleitung zu Java JSON Processing API (JSONP)
1. Was ist JSON ?
JSON (JavaScript Object Notation) ist ein Textdaten mit der Struktur, dessen Elemente ein Paar von Schlüssel und Wert ist. Seine Wert kann ein Element (Schlüssel und Wert) oder manchmal ein Array sein
Das ist eine Struktur der Daten JSON:
{
"name" : "Tran",
"address" : "Hai Duong, Vietnam",
"phones" : [0121111111, 012222222]
}
Zum Beispiel: Die geschachtelten Paare von Schlüssel und Wert
{
"id": 111 ,
"name":"Microsoft",
"websites": [
"http://microsoft.com",
"http://msn.com",
"http://hotmail.com"
],
"address": {
"street":"1 Microsoft Way",
"city":"Redmond"
}
}
2. Die Bibliothek zur Json-Analyse
Viele Java Open Source Code Bibliothek helfen Ihnen bei der Analyse der Daten Json. Unten ist die Liste dieser Bibliotheke:
- json.org
- Jackson
- Google GSON
- json-lib
- javax json
- json-simple
- json-smart
- flexjson
- fastjson
3. Json Processing API
JSON Processing (JSR-353) API wird in der Eigenschaftsüberblick von Java EE 7 eingeführt. D.h seine Bibliothek ist in der Web Server entsprechend Java EE 7 vorhanden. Sie können diese Bibliothek herunterladen oder Maven benutzen
Mit Maven:
<!-- http://mvnrepository.com/artifact/org.glassfish/javax.json -->
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.json</artifactId>
<version>1.0.4</version>
</dependency>
JSON-P verteilt in 2 Haupt API.
- API Streaming (javax.json.stream),
- JSON API Object Model (javax.json).
Streaming API wird zur Analyse des JSON Dokument durch das Durchsuchen von oben nach unten benutzt. Und bei einer Analyse einer Elemente des Dokument sendet es ein Ereignis (event). API eignet für die Analyse der großen JSON Dokument weil es die Daten auf dem Speicher nicht speichern
Die API Object Model sind einfach und leicht zu benutzen. Denn es benutzt API Streaming um das ganze Dokument JSON zu lesen und das Objekt mit der Baumstruktur auf dem Speicher zu erstellen. API passt zur Analyse des kleinen JSON Dokument
Die API Object Model sind einfach und leicht zu benutzen. Denn es benutzt API Streaming um das ganze Dokument JSON zu lesen und das Objekt mit der Baumstruktur auf dem Speicher zu erstellen. API passt zur Analyse des kleinen JSON Dokument
4. Create Maven Project
Sie können ein Maven Projekt schnell erstellen und die Benutzung der Bibliothek JSON-P melden
die Bibliothek Maven
<!-- http://mvnrepository.com/artifact/org.glassfish/javax.json -->
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.json</artifactId>
<version>1.0.4</version>
</dependency>
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.o7planning</groupId>
<artifactId>JSONPTutorial</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>JSONPTutorial</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<!-- http://mvnrepository.com/artifact/org.glassfish/javax.json -->
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.json</artifactId>
<version>1.0.4</version>
</dependency>
</dependencies>
</project>
5. Die Überblick von JSON-P
Einige wichtige Interface vom JSON API sind:
Interface | Die Bezeichnung |
javax.json.JsonReader | Sie können es benutzen um das JSON Objekt oder ein Array zu lesen und das JsonObject zu schaffen. Sie können JsonReader aus der KlasseJson oder JsonReaderFactory. |
javax.json.JsonWriter | Sie können diese Klasse benutzen um das JSON Objekt in Output Stream zu schreiben |
javax.json.stream.JsonParser | Es funktioniert wie einen vollen Analyser und bietet das Stream zur Lesen-Unterstützung des JSON-Objekt. |
javax.json.stream.JsonGenerator | Sie können diese Klasse benutzen um das JSON-Objekt in Output Stream zu schreiben |
javax.json.Json | Diese Klasse wird benutzt um die Objekt zur JSON Behandlung zu erstellen |
6. Das Beispiel über JSON-P
Das ist eine DatenFile JSON:
company.txt
{
"id": 111 ,
"name":"Microsoft",
"websites": [
"http://microsoft.com",
"http://msn.com",
"http://hotmail.com"
],
"address":{
"street":"1 Microsoft Way",
"city":"Redmond"
}
}
Beachten Sie: Der Name der Attribute soll in der Anführungszeichen "" liegen, zum Beispiel:Manchmal hat Daten JSON die Attribute, die nicht in der Anführungszeichen liegen. Einige Part der Analyse JSON versteht auch und erlaubt das. Aber die Analyse JSON-P erlaubt nicht wenn Sie Java JSON-P benutzt um ein Daten JSON, die nicht in der Anführungszeichen liegen, zu analysieren, bekommen Sie eine Ausnahme
- "id": 111
javax.json.stream.JsonParsingException: Unexpected char 105 at (line no=xx, column no=xx, offset=xx)
Address.java
package org.o7planning.jsonptutorial.beans;
public class Address {
private String street;
private String city;
public Address() {
}
public Address(String street, String city) {
this.street = street;
this.city = city;
}
public String getStreet() {
return street;
}
public void setStreet(String street) {
this.street = street;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
@Override
public String toString() {
return street + ", " + city;
}
}
Company.java
package org.o7planning.jsonptutorial.beans;
public class Company {
private int id;
private String name;
private String[] websites;
private Address address;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String[] getWebsites() {
return websites;
}
public void setWebsites(String[] websites) {
this.websites = websites;
}
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("\n id:" + this.id);
sb.append("\n name:" + this.name);
if (this.websites != null) {
sb.append("\n website: ");
for (String website : this.websites) {
sb.append(website + ", ");
}
}
if (this.address != null) {
sb.append("\n address:" + this.address.toString());
}
return sb.toString();
}
}
JsonReader ist ein Objekt zum Lesen der Daten JSON. Sie können das Objekt JsonReader aus der Klasse Json oder aus JsonReaderFactory.lesen
InputStream input = new FileInputStream("company.txt");
// Create JsonReader object from Json class.
JsonReader jsonReader1 = Json.createReader(input);
// Or from Factory
JsonReaderFactory factory = Json.createReaderFactory(null);
JsonReader jsonReader2 = factory.createReader(input);
JsonReaderExample.java
package org.o7planning.jsonptutorial;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import javax.json.Json;
import javax.json.JsonArray;
import javax.json.JsonObject;
import javax.json.JsonReader;
import javax.json.JsonValue;
import org.o7planning.jsonptutorial.beans.Address;
import org.o7planning.jsonptutorial.beans.Company;
public class JsonReaderExample {
public static void main(String[] args) throws IOException {
InputStream input = new FileInputStream("company.txt");
// Create JsonReader object
JsonReader jsonReader = Json.createReader(input);
// Get JsonObject (root object).
JsonObject rootJSON = jsonReader.readObject();
// Close resources
jsonReader.close();
input.close();
// Create empty Company object.
Company company = new Company();
company.setId(rootJSON.getInt("id"));
company.setName(rootJSON.getString("name"));
// Reading websites array from json
JsonArray jsonArray = rootJSON.getJsonArray("websites");
String[] websites = new String[jsonArray.size()];
int index = 0;
for(JsonValue value : jsonArray){
websites[index++] = value.toString() ;
}
company.setWebsites(websites);
// Reading inner object from json object.
JsonObject addressJSON = rootJSON.getJsonObject("address");
Address address = new Address();
address.setStreet(addressJSON.getString("street"));
address.setCity(addressJSON.getString("city"));
company.setAddress(address);
// Print out information
System.out.println(company);
}
}
Das Beispiel durchführen
7. Das Beispiel mit JsonWriter
JsonWriterExample.java
package org.o7planning.jsonptutorial;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.OutputStream;
import javax.json.Json;
import javax.json.JsonArrayBuilder;
import javax.json.JsonObject;
import javax.json.JsonObjectBuilder;
import javax.json.JsonWriter;
import org.o7planning.jsonptutorial.beans.Address;
import org.o7planning.jsonptutorial.beans.Company;
public class JsonWriterExample {
public static void main(String[] args) throws FileNotFoundException {
Company company = createCompany();
// Object Builder
JsonObjectBuilder companyBuilder = Json.createObjectBuilder();
// Object Builder
JsonObjectBuilder addressBuilder = Json.createObjectBuilder();
// Array Builder
JsonArrayBuilder websitesBuilder = Json.createArrayBuilder();
for (String website : company.getWebsites()) {
websitesBuilder.add(website);
}
Address address = company.getAddress();
addressBuilder.add("street", address.getStreet()).add("city", address.getCity() );
companyBuilder.add("id", company.getId()).add("name", company.getName() );
companyBuilder.add("websites", websitesBuilder);
companyBuilder.add("address", addressBuilder);
// Root JsonObject
JsonObject rootJSONObject = companyBuilder.build();
System.out.println("Root JsonObject: " + rootJSONObject);
// Write to file
File outFile= new File("C:/test/company2.txt");
outFile.getParentFile().mkdirs();
OutputStream os = new FileOutputStream(outFile);
JsonWriter jsonWriter = Json.createWriter(os);
jsonWriter.writeObject(rootJSONObject);
jsonWriter.close();
}
public static Company createCompany() {
Company company = new Company();
company.setId(123);
company.setName("Apple");
String[] websites = { "http://apple.com"};
company.setWebsites(websites);
Address address = new Address();
address.setCity("Cupertino");
address.setStreet("1 Infinite Loop");
company.setAddress(address);
return company;
}
}
Run the example:
8. Das Beispiel mit JsonParser
Oben haben Sie mit JsonReader gearbeitet um die File json. Alle Inhalt Json wird auf dem Speicher archiviert. Diese Maßnahme entspricht der kleinen Daten Json. Bei der großen Daten sollen Sie zur Analyse der Daten Json JsonParser benutzen. Die Arbeitsweise vom JsonParser ist so ziemlich ähnlich wie die Analyse der XML von SAX. JsonParser archiviert den Daten auf dem Speicher nicht
Auf Ihre Kode rufen Sie die Methode next() auf damit JsonParser die nächste Elemente Json analysiert . Es sendet ein Event nach der Analyse einer Elemente. Die Analyse kann die folgenden Events schicken
- START_OBJECT
- END_OBJECT
- START_ARRAY
- END_ARRAY
- KEY_NAME
- VALUE_STRING
- VALUE_NUMBER
- VALUE_TRUE
- VALUE_FALSE
- VALUE_NULL.
Nach dem gesendeten Eventsname und dem analysierten Elementenname können Sie die analysierte Position kennen und die Wert bei der Position entnehmen
Die Methode können in diesem Fall benutzt werden:
- getString()
- getInt()
- ....
Das Beispiel gucken:
JsonParserExample.java
package org.o7planning.jsonptutorial;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import javax.json.Json;
import javax.json.stream.JsonParser;
import org.o7planning.jsonptutorial.beans.Address;
import org.o7planning.jsonptutorial.beans.Company;
public class JsonParserExample {
public static void main(String[] args) throws IOException {
InputStream inputStream = new FileInputStream("company.txt");
JsonParser jsonParser = Json.createParser(inputStream);
// Create objects, their fields will be assigned values
// each time the value is found in the events.
Company company = new Company();
Address address = new Address();
List<String> websitesList = new ArrayList<String>();
// Key name of JSON
String keyName = null;
while (jsonParser.hasNext()) {
JsonParser.Event event = jsonParser.next();
switch (event) {
case KEY_NAME:
keyName = jsonParser.getString();
break;
case VALUE_STRING:
setStringValues(company, address, keyName, jsonParser.getString(), websitesList);
break;
case VALUE_NUMBER:
setNumberValues(company, address, keyName, jsonParser.getInt());
break;
default:
// No need..
}
}
company.setAddress(address);
String[] websites = new String[websitesList.size()];
websitesList.toArray(websites);
company.setWebsites(websites);
// Print out
System.out.println(company);
inputStream.close();
jsonParser.close();
}
private static void setNumberValues(Company company, Address address, String keyName, int value) {
if (keyName.equals("id")) {
company.setId(value);
} else {
System.out.println("Unknown Key:" + keyName);
}
}
private static void setStringValues(Company company, Address address, String keyName, String value,
List<String> websiteList) {
if (keyName.equals("name")) {
company.setName(value);
} else if (keyName.equals("street")) {
address.setStreet(value);
} else if (keyName.equals("city")) {
address.setCity(value);
} else if (keyName.equals("websites")) {
websiteList.add(value);
} else {
System.out.println("Unknown Key=" + keyName);
}
}
}
Das Beispiel durchführen
Java Open Source Bibliotheken
- Die Anleitung zu Java JSON Processing API (JSONP)
- Verwenden Sie Scribe OAuth Java API mit Google OAuth 2
- Hardware-Informationen in der Java-Anwendung abrufen
- Restfb Java API für Facebook
- Erstellen Sie Credentials für Google Drive API
- Die Anleitung zu Java JDOM2
- Die Anleitung zu Java XStream
- Verwenden Sie Java Jsoup Parsing HTML
- Rufen Sie geografische Informationen basierend auf der IP-Adresse mit GeoIP2JavaAPI ab
- Lesen und Schreiben von Excel-Dateien in Java mit Apache POI
- Entdecken Sie die Facebook Graph API
- Manipulieren von Dateien und Ordnern auf Google Drive mithilfe von Java
Show More