首页 > 文章列表 > 简化JSON中键值对的字符格式

简化JSON中键值对的字符格式

136 2024-02-05
问题内容

我有这样的 JSON: {"key1": "value1", n n "key2": "value2nwithnewline"}

我想要:

  1. 删除nn
  2. 保留 value2n和换行符。

所以我将拥有一个有效的 JSON。

我尝试过:regex,但未能弄清楚如何在键和值之外指定。

还有这个:

package main

import (
    "bytes"
    "fmt"
)

func main() {
    jsonStr := `{"key1": "value1", n n "key2": "value2nwithnewline"}`
    var cleaned bytes.Buffer
    quoteCount := 0

    for i := 0; i < len(jsonStr); i++ {
        if jsonStr[i] == '"' {
            quoteCount++
        }

        if quoteCount%2 == 0 && jsonStr[i] != 'n' {
            cleaned.WriteByte(jsonStr[i])
        } else if quoteCount%2 == 1 {
            cleaned.WriteByte(jsonStr[i])
        }
    }

    fmt.Println(cleaned.String())
}

Go 游乐场链接:https://go.dev/play/p/zvNSCuE4SjQ

这不起作用,因为它可以 n 实际上是 n


正确答案


鉴于您问题的参数,您可以使用 strings.ReplaceAll 替换所有 nn:

cleaned := strings.ReplaceAll(input, "\n \n ", "")

如果您想继续使用当前的策略,则会遇到一些问题。其中之一是,无论您的条件如何,您总是会写入字符串: cleaned.WriteByte(jsonStr[i]) 发生在您的 if 和 else 情况下。