请帮我解决这个问题。 例如,我有JSONEObject
{
"glossary": {
"title": "example glossary",
"GlossDiv": {
"title": "S",
"seeds": "12415",
}
}
}
例如,我需要改变种子":#34; 12415"到种子":" 555"。 我找到了一些解决方案:
JSONObject js = new JSONObject(jsonString);
js.getJSONObject("glossary").getJSONObject("GlossDiv").remove("seeds");
js.getJSONObject("glossary").getJSONObject("GlossDiv").put("seeds","555");
因此,为了在我的版本中编辑种子,我首先需要获得"词汇表"那么" GlossDiv"在我删除"种子"并把新的种子"具有新价值。
你能帮我找另一种编辑方式吗?例如:只是somemethod(String key,String NewValue)。
答案 0 :(得分:2)
在致电remove
之前,您无需put
。 JSONObject#put
将取代任何现有价值。只需致电
js.getJSONObject("glossary").getJSONObject("GlossDiv").put("seeds", "555");
但是如何一步到位想要钥匙?
你没有。您有一个嵌套的对象树。您必须通过完整的树来到达您的元素。可能有一个图书馆可以为你做这件事,但在这一切之下,它将遍历一切。
答案 1 :(得分:1)
更新/编辑/修改嵌套的JSON对象,并通过递归使用org.json.simple.JSONObject将String转换为JSON
JSON输入文件
{
"Response": {
"AccountId": "12345",
"CompanyCode": 1,
"CustomerName": "Joseph X. Schmoe",
"EmailAddressList": {
"Response.EmailAddressDTO": {
"AlertOptionList": null,
"ContactMethodSeqNum": 2,
"EmailAddress": null
}
},
"MailingAddress": {
"NonStandard": null,
"Standard": {
"Address": "Example",
"DisplayAddressText": null
}
},
"LastBill": null,
"LastPayment": null
}
}
用于将String转换为JSON对象并根据特定的Key更新嵌套的JSON对象值的代码示例:“ Address”:“ Addressxxxxxx”,
public static void main(String[] args) throws IOException {
FileInputStream inFile = new FileInputStream("File_Location");
byte[] str = new byte[inFile.available()];
inFile.read(str);
String string = new String(str);
JSONObject json = JSONEdit.createJSONObject(string);
System.out.println(JSONEdit.replacekeyInJSONObject(json,"Address","Addressxxxxxx"));
}
private static JSONObject replacekeyInJSONObject(JSONObject jsonObject, String jsonKey,
String jsonValue) {
for (Object key : jsonObject.keySet()) {
if (key.equals(jsonKey) && ((jsonObject.get(key) instanceof String)||(jsonObject.get(key) instanceof Number)||jsonObject.get(key) ==null)) {
jsonObject.put(key, jsonValue);
return jsonObject;
} else if (jsonObject.get(key) instanceof JSONObject) {
JSONObject modifiedJsonobject = (JSONObject) jsonObject.get(key);
if (modifiedJsonobject != null) {
replacekeyInJSONObject(modifiedJsonobject, jsonKey, jsonValue);
}
}
}
return jsonObject;
}
private static JSONObject createJSONObject(String jsonString){
JSONObject jsonObject=new JSONObject();
JSONParser jsonParser=new JSONParser();
if ((jsonString != null) && !(jsonString.isEmpty())) {
try {
jsonObject=(JSONObject) jsonParser.parse(jsonString);
} catch (org.json.simple.parser.ParseException e) {
e.printStackTrace();
}
}
return jsonObject;
}
JSON输出:
{
"Response": {
"AccountId": "12345",
"CompanyCode": 1,
"CustomerName": "Joseph X. Schmoe",
"EmailAddressList": {
"Response.EmailAddressDTO": {
"AlertOptionList": null,
"ContactMethodSeqNum": 2,
"EmailAddress": null
}
},
"MailingAddress": {
"NonStandard": null,
"Standard": {
"Address": "Addressxxxxxx",
"DisplayAddressText": null
}
},
"LastBill": null,
"LastPayment": null
}
}
答案 2 :(得分:0)
我找到了解决方案。
public static JSONObject setProperty(JSONObject js1, String keys, String valueNew) throws JSONException {
String[] keyMain = keys.split("\\.");
for (String keym : keyMain) {
Iterator iterator = js1.keys();
String key = null;
while (iterator.hasNext()) {
key = (String) iterator.next();
if ((js1.optJSONArray(key) == null) && (js1.optJSONObject(key) == null)) {
if ((key.equals(keym))) {
js1.put(key, valueNew);
return js1;
}
}
if (js1.optJSONObject(key) != null) {
if ((key.equals(keym))) {
js1 = js1.getJSONObject(key);
break;
}
}
if (js1.optJSONArray(key) != null) {
JSONArray jArray = js1.getJSONArray(key);
for (int i = 0; i < jArray.length(); i++) {
js1 = jArray.getJSONObject(i);
}
break;
}
}
}
return js1;
}
public static void main(String[] args) throws IOException, JSONException {
FileInputStream inFile = new FileInputStream("/home/ermek/Internship/labs/java/task/test5.json");
byte[] str = new byte[inFile.available()];
inFile.read(str);
String text = new String(str);
JSONObject json = new JSONObject(text);
setProperty(json, "rpc_server_type", "555");
System.out.println(json.toString(4));
答案 3 :(得分:0)
这里我写了一个简单的递归函数:
public static JSONObject replaceAll(JSONObject json, String key, String newValue) throws JSONException {
Iterator<?> keys = json.keys();
while (keys.hasNext()) {
String k = (String) keys.next();
if (key.equals(k)) {
json.put(key, newValue);
}
Object value = json.opt(k);
if (value != null && value instanceof JSONObject) {
replaceAll((JSONObject) value, key, newValue);
}
}
return json;
}