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 (?).
Android Studio: 3.4.1 gradle: 5.1.1
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();
}
}
}
J'ai essayé d'implémenter une implémentation similaire avec la bibliothèque javax.json, mais je suis resté bloqué.
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();
}
}
}
J'ai fait référence à l'article suivant.