从 json 文件中删除子属性
Posted
技术标签:
【中文标题】从 json 文件中删除子属性【英文标题】:Delete a child attribute from json file 【发布时间】:2016-09-02 16:13:27 【问题描述】:我在 Java 中有以下 HTTP JSON 响应,它代表一个用户对象。
"account": "Kpatrick",
"firstname": "Patrick",
[
],
"instances":
[
"id": "packerer-pool",
"key": "packerer-pool123",
"userAccount": "kpatrick",
"firstname": "Patrick",
"lastname": "Schmidt",
],
"projects":
[
"id": "packerer-projectPool",
"projectKey": "projectPool-Pool",
"cqprojectName": "xxxxx",
,
"id": "packerer-secondproject",
"projectKey": "projectPool-Pool2",
"cqprojectName": "xxxx",
,
"id": "packerer-thirdproject",
"projectKey": "projectPool-Pool3",
"cqprojectName": "xxxx",
],
"clients":
[
],
"dbid": 76864576,
"version": 1,
"id": "dbpack21"
现在,我想借助projectkey
(例如“projectPool-Pool2”)搜索特定项目。之后,我想完全删除该元素。因为我的目标是在没有这个项目的情况下发送 HTTP 后调用。
我的 HTTP post-call 的结果应该类似于以下:
"account": "Kpatrick",
"firstname": "Patrick",
[
],
"instances":
[
"id": "packerer-pool",
"key": "packerer-pool123",
"userAccount": "kpatrick",
"firstname": "Patrick",
"lastname": "Schmidt",
],
"projects":
[
"id": "packerer-projectPool",
"projectKey": "projectPool-Pool",
"cqprojectName": "xxxxx",
,
"id": "packerer-thirdproject",
"projectKey": "projectPool-Pool3",
"cqprojectName": "xxxx",
],
"clients":
[
],
"dbid": 76864576,
"version": 1,
"id": "dbpack21"
首先,我将响应解析为字符串。
private static String getContent(HttpResponse response)
HttpEntity entity = response.getEntity();
if (entity == null) return null;
BufferedReader reader;
try
reader = new BufferedReader(new InputStreamReader(entity.getContent()));
String line = reader.readLine();
reader.close();
return line;
catch (IllegalStateException e)
e.printStackTrace();
catch (IOException e)
e.printStackTrace();
return null;
现在我正在尝试搜索特定项目,但我不知道如何继续。
String StringResponse = getContent(JsonResponse);
JSONObject jsonObject = new JSONObject(StringResponse);
JSONArray ProjectsArray= jsonObject.getJSONArray("projects");
这种方法正确吗?
最好的问候!
【问题讨论】:
最后代码段中的StringResponse 和 ProjectArray 应该是小写的,因为它们是对象而不是类。 感谢您的快速回放。我还能怎么处理? 小写变量只是一个小的约定问题。查看我对问题的回答 这是一个有效的JSON,你能解析它吗?我收到多个错误。如果您可以发布有效的 JSON ,则更容易测试 我已经更正了两个逗号和一个剪辑。它现在有效吗?现在应该没事了!这是我的 HttpGet - 方法的响应。这就是问题所在,我想解析它,但我不能或者我想删除一个特定的项目:( 【参考方案1】:一旦你有你的阵列,尝试类似...
// Array to store the indexes of the JSONArray to remove
ArrayList<Integer> indexesToRemove = new ArrayList<Integer>();
// Iterate through projects array, check the object at each position
// if it contains the string you want, add its index to the removal list
for (int i = 0; i < projectsArray.length; i++)
JSONObject current = projectsArray.get(i);
if (current.get("projectKey") == "**DESIRED PROJECT KEY**")
indexesToRemove.add(i);
现在您可以遍历索引来删除,并使用 JSONArrays remove 方法从数组中删除相应的对象(不知道它叫什么,上面的代码来自内存)。确保删除您的项目 BACKWARDS,否则您将删除较早的项目,这将更改索引,如果您随后删除另一个索引,则会导致您删除不正确的项目。
// Going through the list backwards so we can remove the highest item each
//time without affecting the lower items
for (int i = indexesToRemove.size()-1; i>=0; i--)
projectsArray.remove(indexesToRemove.get(i));
【讨论】:
感谢您的重播!我收到错误:org.json.JSONException: JSONObject["projects"] not found。那是对象还是属性?因为“项目”甚至有自己的属性。我完全不明白:-/ 对不起,我本来想回答你的第二个问题,但我一直走神。将来当您使用 JSON 时,如果您发现难以阅读原始格式,最好使用 JSON 查看器,这样可以更容易地了解您的添加/检索操作为何不起作用。很高兴你把它分类了!以上是关于从 json 文件中删除子属性的主要内容,如果未能解决你的问题,请参考以下文章
从 powershell 中的 JSON 文件中提取子字符串