#java #json #spring #spring-boot #gson
#java #json #spring #весенняя загрузка #gson
Вопрос:
{
"onboardingInformation": {
"apiInvokerPublicKey": "string",
"apiInvokerCertificate": "string",
"onboardingSecret": "string"
},
"notificationDestination": "string",
"requestTestNotification": true
}
У меня есть объект json, подобный приведенному выше, и я хочу изменить значение apiInvokerPublicKey я не нашел метода в gson, так как я могу его изменить?
{
"onboardingInformation": {
"apiInvokerPublicKey": "abcacabcascvhasj",// i want to change just this part
"apiInvokerCertificate": "string",
"onboardingSecret": "string"
},
"notificationDestination": "string",
"requestTestNotification": true
}
РЕДАКТИРОВАТЬ: я использовал метод addProperty из gson, но он полностью изменяет «onboardingInformation», я просто хочу изменить «apiInvokerPublicKey»
Комментарии:
1. Не могли бы вы, пожалуйста, объяснить, как вы планируете изменить значение? Описание того, что такое входные данные и ожидаемый результат, поможет вам найти лучшее решение.
Ответ №1:
Вы можете прочитать всю JSON
полезную нагрузку как JsonObject
и перезаписать существующее свойство. После этого вы можете сериализовать его обратно в JSON
.
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonObject;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
public class GsonApp {
public static void main(String[] args) throws IOException {
File jsonFile = new File("./resource/test.json").getAbsoluteFile();
Gson gson = new GsonBuilder().setPrettyPrinting().create();
JsonObject root = gson.fromJson(Files.newBufferedReader(jsonFile.toPath()), JsonObject.class);
JsonObject information = root.getAsJsonObject("onboardingInformation");
information.addProperty("apiInvokerPublicKey", "NEW VALUE");
String json = gson.toJson(root);
System.out.println(json);
}
}
Приведенный выше код выводит:
{
"onboardingInformation": {
"apiInvokerPublicKey": "NEW VALUE",
"apiInvokerCertificate": "string",
"onboardingSecret": "string"
},
"notificationDestination": "string",
"requestTestNotification": true
}
Ответ №2:
Я предоставляю фрагмент кода, используя подход Jackson api
//Read JSON and populate java objects
ObjectMapper mapper = new ObjectMapper();
Test test = mapper.readValue(ResourceUtils.getFile("classpath:test.json") , "Test.class");
//do the required change
test.setApiInvokerPublicKey("updated value");
//Write JSON from java objects
ObjectMapper mapper = new ObjectMapper();
Object value = mapper.writeValue(new File("result.json"), person);