[Java] Versuchen Sie, die Elemente der Json-Zeichenfolge mithilfe der Bibliothek zu bearbeiten

Was du machen willst

String jsonString = "{\"Apple\":{" 
						+ "\"cost\":\"0\"},"
					+ "\"Pen\":{"
						+ "\"cost\":\"0\"}}";

Ich möchte die folgenden zwei Punkte ansprechen.

Dieses Mal werde ich die folgende Bibliothek zum Bedienen des typischen (?) Json verwenden.

Ausführungsumgebung

Android Studio: 3.4.1 gradle: 5.1.1

Bibliothek hinzugefügt

Beschreiben der Bibliothek, die im Abhängigkeitsblock von build.gradle hinzugefügt werden soll.

dependencies {
	...
    implementation 'com.google.code.gson:gson:2.8.5'
    implementation 'com.fasterxml.jackson.core:jackson-databind:2.9.8'
    implementation 'org.glassfish:javax.json:1.1.4'
}

Gson Verwenden Sie die erstellte Methode (editJson), um eine Json-Zeichenfolge zu erstellen Ersetzt durch Map <String, MAP <String, String >> (Gson.fromJson) und weist den gewünschten Schlüssel und Wert zu. Nach der Ersetzung wird die Map wieder in eine Json-Zeichenfolge (Gson.toJson) konvertiert.

Obwohl es vom Hauptthema abweicht, Konvertiere [Json => andere Klasse] in "Deserialization", Die Konvertierung von [other class => Json] heißt "Serialization".

import com.google.gson.Gson;
...

public class GsonExample {

	String jsonString = "{\"Apple\":{" +
							"\"cost\":\"0\"}," +
						"\"Pen\":{" + 
							"\"cost\":\"0\"}}";
	
	public void main() {
		editJson("Apple", "100");
		/*
			{
				"Apple": {
					"cost": "100"
				},
				"Pen": {"
					"cost": "0"
				}
			}"
		*/
		editJson("ApplePen", "");
		/*
			{
				"Apple": {
					"cost": "100"
				},
				"Pen": {"
					"cost": "0"
				}
				"ApplePen": {"
					"cost": "0"
				}
			}"
		*/
	}

	private void editJson(String key, String str) {
		if (str.isEmpty()) str = "0";
        Map<String, String> innerMap = new HashMap<>();
        innerMap.put("cost", str);

    	Gson gson = new Gson();
    	//Konvertieren Sie die Json-Zeichenfolge in Map
        Map<String, Map<String,String>> jsonMap = gson.fromJson(jsonString, Map.class);
        jsonMap.put(key, innerMap);
    	//Konvertieren Sie Map erneut in Json-Zeichenfolge
        jsonString = gson.toJson(jsonMap);
    }
}

Jackson Der Austauschvorgang erfolgt fast genauso wie bei Gson. Jackson übersetzt Json über die ObjectMapper-Methode.

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
...

public class JacksonExample {
	// main()Wurde weggelassen

    private void editJson(String str, String key) {
		if (str.isEmpty()) str = "0";
        Map<String, Object> map = null;
        Map<String, String> innerMap = new HashMap<>();
        innerMap.put("cost", str);

        ObjectMapper mapper = new ObjectMapper();
        try {
        	//Konvertieren Sie die Json-Zeichenfolge in Map
            map = mapper.readValue(json, 
									new TypeReference<Map<String, Object>>() {});
        } catch (IOException e) {
            e.printStackTrace();
        }
        map.put(key, innerMap);
        try {
        	//Konvertieren Sie Map erneut in Json-Zeichenfolge
            json = mapper.writeValueAsString(map);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
	}
}

Über javax.json

Ich habe versucht, eine ähnliche Implementierung mit der Bibliothek javax.json zu implementieren, bin aber festgefahren.

Impressionen

Hinzugefügt 20.09.27 (Über org.json.JSONObject)

Ich habe festgestellt, dass Sie "org.json.JSONObject" verwenden können, wenn Sie nur Json in Map konvertieren und Werte hinzufügen möchten.

import org.json.JSONException;
import org.json.JSONObject;
...

public class JSONExample {
	// main()Wurde weggelassen

    private void editJson(String str, String key) {
		if (str.isEmpty()) str = "0";
        Map<String, String> innerMap = new HashMap<>();
        innerMap.put("cost", str);
        try {
            JSONObject jsonObject = new JSONObject(json);
            jsonObject.put(key, new JSONObject(innerMap));
            json = jsonObject.toString();
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
}

Verweise

Ich habe auf den folgenden Artikel verwiesen.

Recommended Posts

[Java] Versuchen Sie, die Elemente der Json-Zeichenfolge mithilfe der Bibliothek zu bearbeiten
Analysieren und objektivieren Sie JSON mithilfe der Annotation @JsonProperty von Jackson, einer Java-Bibliothek
Versuchen Sie es mit globalem Hooking in Java mithilfe der JNativeHook-Bibliothek
[Java] Löschen Sie die Elemente von List
Versuchen Sie, || anstelle des ternären Operators zu verwenden
Untersuchen Sie die Speichernutzung von Java-Elementen
Versuchen Sie es mit der Stream-API in Java
Versuchen Sie es mit der JSON-Format-API in Java
Vergleichen Sie Elemente eines Arrays (Java)
Versuchen Sie es mit der Wii-Fernbedienung in Java
[Java] Wie man mit der String-Klasse an die Spitze eines bestimmten Strings kommt
Die Geschichte des einfachen String-Vergleichs in Java
[Java] Ermittelt die Länge der Ersatzpaarzeichenfolge
[Java] Der verwirrende Teil von String und StringBuilder
Versuchen Sie eine ähnliche Suche in der Bildsuche mit dem Java SDK [Suche]
Versuchen Sie, mit JZOS von Java aus auf das Dataset zuzugreifen
Probieren Sie Progate Free Edition [Java II]
Versuchen Sie es mit der Syntaxanalyse der COTOHA-API in Java
Probieren Sie Progate Free Edition [Java I]
Versuchen Sie, mit Scala mithilfe der Standardbibliothek von Java Text zu einem Bild hinzuzufügen
[Java] So erhalten Sie mithilfe von Stream auf einfache Weise die längste Zeichenfolge von ArrayList
Fassen Sie die zusätzlichen Elemente der optionalen Klasse in Java 9 zusammen
Versuchen Sie es mit dem Ruby on Rails-Abfrageattribut
[Hinweis] Java Ausgabe der Summe von ungeraden und geraden Elementen
Versuchen Sie es mit RocksDB mit Java
Versuchen Sie, mit Java zu kratzen [Hinweis]
Überprüfen Sie den Status der Java-Anwendung, ohne das Überwachungstool zu verwenden
Die Geschichte, Java mithilfe der BitBucket-Pipeline nach Heroku zu bringen
Ich habe versucht, die CameraX-Bibliothek mit Android Java Fragment zu verwenden
[Java] Versuchen Sie, das Fizz Buzz-Problem mithilfe der rekursiven Verarbeitung zu lösen
Die Geschichte, das Verhalten von String durch Passieren von Java nicht zu kennen
Probieren Sie HelloWorld mit der Mindestkonfiguration von Heroku Java Spring-Boot aus
Versuchen Sie es mit der Zweipunktmessfunktion von Firebase Performance Monitoring. [Android]
Versuchen Sie, Werte von Java Servlet mit JSON an die iPhone-App zu übergeben
Ich habe versucht, die Methoden von Java String und StringBuilder zusammenzufassen
So überprüfen Sie den Inhalt der Java-Zeichenfolge mit fester Länge
Ist die von Ihnen verwendete Version von Elasticsearch mit Java 11 kompatibel?
[Java] Geschwindigkeitsvergleich der Zeichenfolgenkombination
Verschiedene Methoden der Java String Klasse
[Java Edition] Geschichte der Serialisierung
Java-Vergleich mit der compareTo () -Methode
Versuchen Sie es mit Redis mit Java (jar)
Umgang mit Zeitzonen mit Java
Verschiedene Methoden der String-Klasse
Willkommen im Sumpf der Java-Bibliotheken! !!
[Java] Versuchen Sie, mithilfe von Generika zu implementieren
Versuchen Sie es mit dem Nachrichtensystem Pulsar
Versuchen Sie es mit der IBM Java-Methodenverfolgung
[Java] Korrekter Vergleich des String-Typs
Zusammenfassung der objektorientierten Programmierung mit Java
Ich habe die Quelle von String gelesen
Der Ursprung von Java-Lambda-Ausdrücken
Versuchen Sie es mit dem Java SDK von Hyperledger Iroha
[Java] Wo haben Sie versucht, Java zu verwenden?
Ich habe versucht, Google HttpClient von Java zu verwenden
Erhöhen Sie dynamisch die Anzahl der Elemente in einem zweidimensionalen Java-Array (mehrdimensionales Array).
[Java] Überprüfen Sie, ob die Zeichenfolge nur aus Leerzeichen besteht (= Leerzeichen)
Zeigen Sie den japanischen Kalender und Tag mit der Java8-Standardklasse an
Versuchen Sie es mit dem Java Framework Nablarch [Web Application]
Holen Sie sich das Ergebnis von POST in Java
Überprüfen Sie den Inhalt des Java-Zertifikatspeichers