[Java] Essayez de modifier les éléments de la chaîne Json à l'aide de la bibliothèque

Chose que tu veux faire

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

Je veux faire les deux points suivants.

Cette fois, j'utiliserai la bibliothèque suivante pour faire fonctionner le Json typique (?).

Environnement d'exécution

Android Studio: 3.4.1 gradle: 5.1.1

Bibliothèque ajoutée

Décrivez la bibliothèque à ajouter dans le bloc de dépendances de build.gradle.

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 Utilisez la méthode created (editJson) pour créer une chaîne Json Remplacé par Map <String, MAP <String, String >> (Gson.fromJson) et attribué la clé et la valeur souhaitées. Après la substitution, la carte est reconvertie en une chaîne Json (Gson.toJson).

Bien qu'il s'écarte du sujet principal, Convertir [Json => autre classe] en "désérialisation", La conversion de [autre classe => Json] est appelée "sérialisation".

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();
    	//Convertir la chaîne Json en carte
        Map<String, Map<String,String>> jsonMap = gson.fromJson(jsonString, Map.class);
        jsonMap.put(key, innerMap);
    	//Convertir à nouveau la carte en chaîne Json
        jsonString = gson.toJson(jsonMap);
    }
}

Jackson Le processus de remplacement est effectué presque de la même manière que pour Gson. Jackson traduit Json via la méthode ʻObjectMapper`.

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

public class JacksonExample {
	// main()Est omis

    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 {
        	//Convertir la chaîne Json en carte
            map = mapper.readValue(json, 
									new TypeReference<Map<String, Object>>() {});
        } catch (IOException e) {
            e.printStackTrace();
        }
        map.put(key, innerMap);
        try {
        	//Convertir à nouveau la carte en chaîne Json
            json = mapper.writeValueAsString(map);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
	}
}

À propos de javax.json

J'ai essayé d'implémenter une implémentation similaire avec la bibliothèque javax.json, mais je suis resté bloqué.

Impressions

Ajouté le 20.09.27 (À propos de org.json.JSONObject)

J'ai réalisé que ʻorg.json.JSONObject` peut être utilisé si vous voulez simplement convertir Json en Map et ajouter des valeurs.

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

public class JSONExample {
	// main()Est omis

    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();
        }
    }
}

Les références

J'ai fait référence à l'article suivant.

Recommended Posts

[Java] Essayez de modifier les éléments de la chaîne Json à l'aide de la bibliothèque
Analyser et objectiver JSON à l'aide de l'annotation @JsonProperty de la bibliothèque Java Jackson
Essayez le hooking global en Java à l'aide de la bibliothèque JNativeHook
[Java] Supprimer les éléments de la liste
Essayez d'utiliser || au lieu de l'opérateur ternaire
Examiner l'utilisation de la mémoire des éléments Java
Essayez d'utiliser l'API Stream en Java
Essayez d'utiliser l'API au format JSON en Java
Comparer les éléments d'un tableau (Java)
Essayez d'utiliser la télécommande Wii en Java
[Java] Comment accéder au début d'une chaîne spécifique à l'aide de la classe String
L'histoire de la comparaison de chaînes de bas niveau en Java
[Java] Obtenir la longueur de la chaîne de paire de substitution
[Java] La partie déroutante de String et StringBuilder
Essayez une recherche similaire de recherche d'images à l'aide du SDK Java [Recherche]
Essayez d'accéder à l'ensemble de données depuis Java en utilisant JZOS
Essayez Progate Free Edition [Java II]
Essayez d'utiliser l'analyse syntaxique de l'API COTOHA en Java
Essayez Progate Free Edition [Java I]
Essayez d'ajouter du texte à une image avec Scala en utilisant la bibliothèque standard de Java
[Java] Comment obtenir facilement la plus longue chaîne de caractères d'ArrayList à l'aide de stream
Récapitulez les éléments supplémentaires de la classe Optional dans Java 9
Essayez d'utiliser l'attribut de requête Ruby on Rails
[Note] Sortie Java de la somme des éléments pairs et impairs
Essayez d'utiliser RocksDB avec Java
Essayez de gratter en utilisant Java [Note]
Vérifiez l'état des applications Java sans utiliser d'outils de surveillance
L'histoire de la transmission de Java à Heroku à l'aide du pipeline BitBucket
J'ai essayé d'utiliser la bibliothèque CameraX avec Android Java Fragment
[Java] Essayez de résoudre le problème de Fizz Buzz en utilisant un traitement récursif
L'histoire de ne pas connaître le comportement de String en passant par Java
Essayez HelloWorld avec la configuration minimale de Heroku Java spring-boot
Essayez d'utiliser la fonction de mesure en deux points de Firebase Performance Monitoring. [Android]
Essayez de transmettre des valeurs de Java Servlet à l'application iPhone à l'aide de JSON
J'ai essayé de résumer les méthodes de Java String et StringBuilder
Comment vérifier le contenu de la chaîne de caractères java de longueur fixe
La version d'Elasticsearch que vous utilisez est-elle compatible avec Java 11?
[Java] Comparaison de vitesse de combinaison de chaînes
Diverses méthodes de la classe Java String
[Édition Java] Histoire de la sérialisation
Comparaison Java à l'aide de la méthode compareTo ()
Essayez d'utiliser Redis avec Java (jar)
Gestion des fuseaux horaires avec Java
Diverses méthodes de la classe String
Bienvenue dans le marais des bibliothèques Java! !!
[Java] Essayez de mettre en œuvre à l'aide de génériques
Essayez d'utiliser le système de messagerie Pulsar
Essayez d'utiliser le traçage de méthode IBM Java
[Java] Comparaison correcte du type String
Résumé de la programmation orientée objet utilisant Java
J'ai lu la source de String
L'origine des expressions Java lambda
Essayez d'utiliser le SDK Java d'Hyperledger Iroha
[Java] Où avez-vous essayé d'utiliser java
J'ai essayé d'utiliser Google HttpClient de Java
Augmenter dynamiquement le nombre d'éléments dans un tableau bidimensionnel Java (tableau multidimensionnel)
[Java] Vérifiez si la chaîne de caractères est composée uniquement de blancs (= Vierge)
Afficher le calendrier et le jour japonais en utilisant la classe standard java8
Essayez d'utiliser le framework Java Nablarch [Application Web]
Obtenez le résultat de POST en Java
Vérifiez le contenu du magasin de certificats Java