2017-07-14 18 views
2

私はJSON文字列の配列を持っているgolangのJSON配列から要素を削除する方法は?

例:私は配列から「名前」を削除したい

[ 
{ 
    "name":"abc" 
    "age":25 
} 
{ 
    "name":"xyz" 
    "age":"26" 
} 
] 

実行時に。どうすればそれをすることができますか?私は非整列化したくありません。

[ 
    { 
     "age":25 
    } 
    { 
     "age":"26" 
    } 
    ] 
+0

あなたはそれを非整列化したくない場合は、唯一の方法は、あなたは、ステートマシンを実装することになります、バイトを自分で解析することです。 – tazo

+1

あなたが本当にそれをアンマーシャリングしてはいけないならば、正規表現でそれを行うことができるかもしれません。 – gabeio

+3

アンマーシャリング/修正/マーシャリングで何が問題になっていますか?それはかなり簡単です。 –

答えて

2

あなたはこのパッケージgjsonsjsonを使って、あなたが望むことができます。

例:

package main 

import (
    "fmt" 
    "log" 
    "strconv" 

    "github.com/tidwall/gjson" 
    "github.com/tidwall/sjson" 
) 

func main() { 
    bJSON := []byte(`  
      [ 
       { 
        "name": "abc", 
        "age": 25 
       }, 
       { 
        "name": "xyz", 
        "age": 26 
       } 
      ] 
    `) 

    newJSON := bJSON 
    var err error 

    result := gjson.GetBytes(bJSON, "#.age") 

    for i := range result.Array() { 
     newJSON, err = sjson.DeleteBytes(newJSON, strconv.Itoa(i)+".age") 
     if err != nil { 
      log.Println(err) 
     } 
    } 

    fmt.Println(string(newJSON)) 
} 

が出力:

[ 
    { 
    "name": "abc" 
    }, 
    { 
    "name": "xyz" 
    } 
] 
+0

"キー"を追加しなくても、 –

2

あなたは文字通りそれを非整列化したくない場合は、(効果的にそれを自分でマーシャリング解除)正規表現の置換のいくつかの並べ替えをして、またはステートマシンを構築立ち往生することがあります。あなたが質問をしているなら、あなたはこのアプローチをとるべきではありません。このアプローチは非常に高度なユーザーのためのものであり、極めてまれな状況以外の利点はありません。

アンマーシャリングするためのコードを書いていても構いませんが、カバーの下に非マーシャリングが含まれていても、あなたのためのツールは気にしません。

私が思うなら、gabs(免責事項:私はこのライブラリを一度も使用したことがない)のようなライブラリを考えることができます。これは簡単なJSON操作を提供します。もちろん、JSONをプロセスでアンマーシャリングしてから、結果を求めるときにJSONを再記述します。

関連する問題