2

我试图从 json 文件中删除 json 节点。为了解析 ande,我使用了 json slurper

File f=new File(fileLocation);
 def result = new JsonSlurper().parseText(f.text)
 Map jsonResult = (Map) result; 
 Map Bookmarkbar = (Map) jsonResult.get("roots").get("bookmark_bar");
List Children=(List) Bookmarkbar.get("children");
 println("no of elements "+Children.get(i).size());
 if("Google".equals(Children.get(i).get("name"))
{
 Children.remove(i);
 println(Children.get(i));
}

在这里它正在删除第 i 个子节点。但是当我签入 json 文件时,我可以看到没有发生变化?println(Children.get(i)); 在删除一个节点之后显示下一个节点。并且计数也减少了。那么在删除子节点后我将如何保存文件?

4

1 回答 1

10

你没有说你的 JSON 是什么样子的,所以我有一个猜测......我放了:

{ "roots":{
    "bookmark_bar":{
      "children":[
        { "name":"Google", "url":"http://www.google.com" },
        { "name":"StackOverflow", "url":"http://stackoverflow.com" }
      ]
    }
  }
}

进入/tmp/test.json

然后运行这个脚本:

import groovy.json.*

File jsonFile = new File( '/tmp/test.json' )

// Load the Json into a Map
Map result = new JsonSlurper().parseText( jsonFile.text )

// Set the children to every element whos name isn't Google
result.roots.bookmark_bar.children = result.roots.bookmark_bar.children.findAll {
  it.name != 'Google'
}

// Get the new JSON string
String newJson = new JsonBuilder( result ).toPrettyString()

// And write it out to the file again
jsonFile.withWriter( 'UTF-8' ) { it << newJson }

将文件内容更改为:

{
    "roots": {
        "bookmark_bar": {
            "children": [
                {
                    "name": "StackOverflow",
                    "url": "http://stackoverflow.com"
                }
            ]
        }
    }
}

那是你想要的吗?

于 2012-04-27T08:24:56.757 回答