如何在 Golang 中从 JSON 数组中删除元素?

3

I have a array of JSON string

ex:

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

在运行时,我想从数组中删除“name”。我们该怎么做?我不想进行解组。
[
     {
      "age":25
     }
     {
      "age":"26"
     }
  ]

1
如果您不想进行反序列化,唯一的方法是自己解析字节,这将导致您实现一个状态机。 - pbathala
1
如果你真的不能反序列化它,你或许可以使用正则表达式来完成。 - gabeio
3
反序列化/修改/序列化有什么问题?这似乎非常简单明了。 - Andy Schweig
2个回答

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"
  }
]

我们能否在不添加“key”的情况下完成它? - bandi shankar

1
如果您真的不想解组它,那么您将被困在某种正则表达式替换或构建状态机(实际上是自己解组)中。如果您正在提出这个问题,那么您不应采取这种方法。这种方法仅适用于非常高级的用户,并且除了极为罕见的情况外没有任何优势。
我猜您只是不想费力编写代码来解组它,而且即使涉及在内部进行解组,也不介意使用可以为您完成工作的工具。
如果我的猜测是正确的,您可以考虑像gabs这样的库(免责声明:我从未使用过这个库),它提供了简便的JSON操作。但当然,在此过程中,它会解组JSON,然后在您请求结果时重新组合它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接