Code, der verwendet wird, wenn Sie Json nur mit Standardbibliotheken in Java (verbesserte Version) verarbeiten möchten. Gson ist nicht erforderlich

gson ist auch praktisch, aber ich fand es problematisch, nicht mehrere Ebenen gleichzeitig verfolgen zu können, also mache ich ein solches Werkzeug. Es gibt auch viele langweilige Gründe, warum "ich Gson wirklich im XX-System verwenden möchte, aber die interne Genehmigung ist problematisch".

Sie können es so verwenden.

public static void main(String[] args) {
String json = "{'test':'this is test','test2':{'test3':'value3'},'test4':['a','b','c']}";
	{
		Object value = JsonUtil.get(json, "test"); // <- 
		System.out.println(value); // "this is test"
	}
	{
		Object value = JsonUtil.get(json, "test2.test3"); // <-ich möchte das machen
		System.out.println(value); // "value3"
	}
	{
		Object[] value = JsonUtil.getAsArray(json, "test4");
		System.out.println(Arrays.toString(value)); // ["a","b","c"]
		System.err.println(value.getClass());
		for (int n = 0; n < value.length; n++) {
			System.err.println(value[n]);
		}
	}
}

Unten ist der Quellcode. Sie können es vor der Verwendung kopieren oder ändern.


package pkg;

import java.util.Arrays;
import java.util.Map;
import java.util.Set;

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;

public class JsonUtil {

	public static Object[] getAsArray(String json, String code) {
		Object obj = get(json, code);
		if (obj instanceof Object[]) {
			return (Object[]) obj;
		} else {
			return null;
		}
	}
	public static Object get(String json, String code) {
		// Get the JavaScript engine
		ScriptEngineManager manager = new ScriptEngineManager();
		ScriptEngine engine = manager.getEngineByName("JavaScript");

		String script = "var obj = " + json + ";";
		try {
			engine.eval(script);
			{
				Object obj = engine.eval("obj." + code);
				if (obj instanceof Map) {
					java.util.Map map = (java.util.Map) obj;
					Set entrySet = map.entrySet();
					Object[] arr = new Object[entrySet.size()];
					int n = 0;
					for (Object objValue : map.values()) {
						if (objValue instanceof String) {
							String sValue = (String) objValue;
							arr[n] = sValue;
						} else {
							arr[n] = map.get(obj);
						}
						n++;
					}
					return arr;
				}
				return obj;
			}
		} catch (ScriptException e) {
			e.printStackTrace();
			return null;
		}
	}
	public static void main(String[] args) {
		String json = "{'test':'this is test','test2':{'test3':'value3'},'test4':['a','b','c']}";
		{
			Object value = JsonUtil.get(json, "test");
			System.out.println(value); // "this is test"
		}
		{
			Object value = JsonUtil.get(json, "test2.test3");
			System.out.println(value); // "value3"
		}
		{
			Object[] value = JsonUtil.getAsArray(json, "test4");
			System.out.println(Arrays.toString(value)); // ["a","b","c"]
			System.err.println(value.getClass());
			for (int n = 0; n < value.length; n++) {
				System.err.println(value[n]);
			}
		}
	}
}

Recommended Posts

Code, der verwendet wird, wenn Sie Json nur mit Standardbibliotheken in Java (verbesserte Version) verarbeiten möchten. Gson ist nicht erforderlich
Code, der verwendet werden soll, wenn Sie Json nur mit Standardbibliotheken in Java verarbeiten möchten
Wenn Sie Java-Bibliothekstests mit Spock in mehreren Modulen mit Gradle in Android Studio 3 implementieren möchten
Vergleich von Versionszeichenfolgen, wenn Sie die Verarbeitung zwischen zwei Versionen verzweigen möchten (Java-Implementierung)
Das erste, was Sie tun müssen, wenn Sie mit Heroku auf GitHub mit Eclipse auf Java zufrieden sein möchten
Wenn Sie Annotation in Java 8 dynamisch ersetzen möchten
Verwenden Sie JLine, wenn Sie Tastenanschläge auf der Konsole zeichenweise in Java verarbeiten möchten
[Java] Ich möchte mit dem Schlüssel im Objekt eindeutig arbeiten
[Wörter, die mir geschrieben wurden, als ich in der ersten Klasse war ⑦] Was ich möchte, dass Sie zumindest in die Visual Studio Code-Erweiterung aufnehmen
Ich möchte die IP-Adresse erhalten, wenn ich mit Java eine Verbindung zu Wi-Fi herstelle
[Java] Verwenden Sie kryptografische Technologie mit Standardbibliotheken
Versuchen Sie, mit Scala mithilfe der Standardbibliothek von Java Text zu einem Bild hinzuzufügen
Code zum Escapezeichen von JSON-Zeichenfolgen in Java
Wenn Sie InputStream in JDBI3 binden möchten
Ein Hinweis, wenn Sie Tupel in Java möchten
Wenn Sie die Methode außerhalb verwenden möchten
Sie müssen den Host auch beim Remote-Debugging mit Java 9 oder höher angeben
Zusammenfassung der Verwendung des im IE festgelegten Proxy-Sets bei der Verbindung mit Java
So implementieren Sie UICollectionView mit Code nur in Swift
[Java] Verschlüsselung mit AES-Verschlüsselung mit Standardbibliothek
Quelle zum Abrufen der Umleitungsquell-URL in Java
Unterschiede im Code bei Verwendung des Längensystems in Java
[Ruby + Rails] Wenn Sie sich zusammen mit der Benutzerregistrierung in der Mailchimp-Mailingliste registrieren möchten
In Java möchte ich mehrere angegebene Zeichen nur von Anfang bis Ende abschneiden.
So schreiben Sie in die Modellklasse, wenn Sie mit PlayFramework Binärdaten in der Datenbank speichern möchten
Wenn Sie die Hauptzweiginformationen in dem aktuellen Zweig wiedergeben möchten, an dem Sie gerade arbeiten
[Java] Ändern Sie die Verarbeitung entsprechend der Situation mit dem Strategiemuster
[Java] [jackson] Entspricht dem nachfolgenden Komma (nachgestellten Komma) beim Parsen von JSON.
Wenn Sie explizit ODER oder UND mit Ransack schreiben möchten
Senden Sie den verwendeten Gutscheincode an den angegebenen Endpunkt zurück
Dinge, die Sie beim Schreiben von Code in Java beachten sollten
Selbst in Java möchte ich true mit == 1 && a == 2 && a == 3 ausgeben
Ein Memo zum Starten der Java-Programmierung mit VS Code (Version 2020-04)
docker-compose.yml, wenn Sie MySQL auf Docker laufen lassen möchten
lombok.config, wenn Sie @Qualifier mit lombok an @RequiredArgsConstructor übergeben möchten
[Java] Ich möchte Standardeingabe und Standardausgabe mit JUnit testen
Ich möchte die if-else-Anweisung für bedingte Verzweigungen in Java vereinfachen
[Swift] Wenn Sie wissen möchten, ob die Anzahl der Zeichen in String mit einer bestimmten Anzahl übereinstimmt ...
[Für Super-Anfänger] Das Mindestwissen, das Sie mit Hashes und Symbolen berücksichtigen möchten
Was tun, wenn Sie die Quellposition wissen möchten, an der die Methode in bind.pry definiert ist?