2

私はjsonファイルからjsonノードを削除しようとしていました。解析して取得しないために、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));
}

ここでは、children の 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 に答える