Java 更新JSONObject中的元素
假设我给了一个JSONObjectJava 更新JSONObject中的元素,java,android,json,Java,Android,Json,假设我给了一个JSONObject { "person":{"name":"Sam", "surname":"ngonma"}, "car":{"make":"toyota", "model":"yaris"} } 如何更新JSONObject中的一些值 如下图所示: String name = jsonArray.getJSONObject(0).getJSONObject("person").getString("name"); name = "Sammie"; 使用put方法:
{
"person":{"name":"Sam", "surname":"ngonma"},
"car":{"make":"toyota", "model":"yaris"}
}
如何更新JSONObject中的一些值
如下图所示:
String name = jsonArray.getJSONObject(0).getJSONObject("person").getString("name");
name = "Sammie";
使用put方法:
删除密钥,然后再次添加修改后的密钥、值对,如下所示:
JSONObject js = new JSONObject();
js.put("name", "rai");
js.remove("name");
js.put("name", "abc");
我没有用你的例子;但概念上是一样的。您好,我可以向您推荐通用方法。使用递归
public static JSONObject function(JSONObject obj, String keyMain,String valueMain, String newValue) throws Exception {
// We need to know keys of Jsonobject
JSONObject json = new JSONObject()
Iterator iterator = obj.keys();
String key = null;
while (iterator.hasNext()) {
key = (String) iterator.next();
// if object is just string we change value in key
if ((obj.optJSONArray(key)==null) && (obj.optJSONObject(key)==null)) {
if ((key.equals(keyMain)) && (obj.get(key).toString().equals(valueMain))) {
// put new value
obj.put(key, newValue);
return obj;
}
}
// if it's jsonobject
if (obj.optJSONObject(key) != null) {
function(obj.getJSONObject(key), keyMain, valueMain, newValue);
}
// if it's jsonarray
if (obj.optJSONArray(key) != null) {
JSONArray jArray = obj.getJSONArray(key);
for (int i=0;i<jArray.length();i++) {
function(jArray.getJSONObject(i), keyMain, valueMain, newValue);
}
}
}
return obj;
}
publicstaticjsonobject函数(jsonobjectobj、stringkeymain、stringvaluemain、stringnewvalue)抛出异常{
//我们需要知道Jsonobject的键
JSONObject json=新的JSONObject()
迭代器迭代器=obj.keys();
字符串键=null;
while(iterator.hasNext()){
key=(字符串)迭代器.next();
//若对象只是字符串,那个么我们将更改键中的值
if((obj.optJSONArray(key)==null)和&(obj.optJSONObject(key)==null)){
if((key.equals(keyMain))&&(obj.get(key.toString().equals(valueMain))){
//赋予新的价值
对象put(键,新值);
返回obj;
}
}
//如果是jsonobject
if(obj.optJSONObject(key)!=null){
函数(obj.getJSONObject(key)、keyMain、valueMain、newValue);
}
//如果是jsonarray
if(obj.optJSONArray(key)!=null){
JSONArray jArray=obj.getJSONArray(key);
for(inti=0;ipublicstaticjsonobjectupdatejson(jsonobjectobj,stringkeystring,stringnewvalue)抛出异常{
JSONObject json=新的JSONObject();
//获取json对象的键
迭代器迭代器=obj.keys();
字符串键=null;
while(iterator.hasNext()){
key=(字符串)迭代器.next();
//如果键是字符串,则更新该值
if((obj.optJSONArray(key)==null)和&(obj.optJSONObject(key)==null)){
if((key.equals(keyString))){
//赋予新的价值
对象put(键,新值);
返回obj;
}
}
//如果是jsonobject
if(obj.optJSONObject(key)!=null){
updateJson(obj.getJSONObject(key),keyString,newValue);
}
//如果是jsonarray
if(obj.optJSONArray(key)!=null){
JSONArray jArray=obj.getJSONArray(key);
for(int i=0;i
用新值更新任何JSONObjet的通用方法
private static void updateJsonValues(JsonObject jsonObj) {
for (Map.Entry<String, JsonElement> entry : jsonObj.entrySet()) {
JsonElement element = entry.getValue();
if (element.isJsonArray()) {
parseJsonArray(element.getAsJsonArray());
} else if (element.isJsonObject()) {
updateJsonValues(element.getAsJsonObject());
} else if (element.isJsonPrimitive()) {
jsonObj.addProperty(entry.getKey(), "<provide new value>");
}
}
}
private static void parseJsonArray(JsonArray asJsonArray) {
for (int index = 0; index < asJsonArray.size(); index++) {
JsonElement element = asJsonArray.get(index);
if (element.isJsonArray()) {
parseJsonArray(element.getAsJsonArray());
} else if (element.isJsonObject()) {
updateJsonValues(element.getAsJsonObject());
}
}
}
private static void updateJsonValues(JsonObject jsonObj){
for(Map.Entry:jsonObj.entrySet()){
JsonElement元素=entry.getValue();
if(element.isJsonArray()){
parseJsonArray(element.getAsJsonArray());
}else if(element.isJsonObject()){
updateJsonValues(element.getAsJsonObject());
}else if(element.isJsonPrimitive()){
jsonObj.addProperty(entry.getKey(),“”);
}
}
}
私有静态void parseJsonArray(JsonArray asJsonArray){
for(int index=0;index
对于它的价值,也可以与person.element(“name”,“Sammie”)一起使用。
@EriPro请看看这个问题什么是valueMain?如果我没有弄错的话,应该替换旧的值。但是如何更新json数组中的特定位置@eabyshev@Venkatesh第一个设置为参数keyMain、valueMain(键,值-json中的特定位置)和用于替换的newValue
public static JSONObject updateJson(JSONObject obj, String keyString, String newValue) throws Exception {
JSONObject json = new JSONObject();
// get the keys of json object
Iterator iterator = obj.keys();
String key = null;
while (iterator.hasNext()) {
key = (String) iterator.next();
// if the key is a string, then update the value
if ((obj.optJSONArray(key) == null) && (obj.optJSONObject(key) == null)) {
if ((key.equals(keyString))) {
// put new value
obj.put(key, newValue);
return obj;
}
}
// if it's jsonobject
if (obj.optJSONObject(key) != null) {
updateJson(obj.getJSONObject(key), keyString, newValue);
}
// if it's jsonarray
if (obj.optJSONArray(key) != null) {
JSONArray jArray = obj.getJSONArray(key);
for (int i = 0; i < jArray.length(); i++) {
updateJson(jArray.getJSONObject(i), keyString, newValue);
}
}
}
return obj;
}
private static void updateJsonValues(JsonObject jsonObj) {
for (Map.Entry<String, JsonElement> entry : jsonObj.entrySet()) {
JsonElement element = entry.getValue();
if (element.isJsonArray()) {
parseJsonArray(element.getAsJsonArray());
} else if (element.isJsonObject()) {
updateJsonValues(element.getAsJsonObject());
} else if (element.isJsonPrimitive()) {
jsonObj.addProperty(entry.getKey(), "<provide new value>");
}
}
}
private static void parseJsonArray(JsonArray asJsonArray) {
for (int index = 0; index < asJsonArray.size(); index++) {
JsonElement element = asJsonArray.get(index);
if (element.isJsonArray()) {
parseJsonArray(element.getAsJsonArray());
} else if (element.isJsonObject()) {
updateJsonValues(element.getAsJsonObject());
}
}
}