Go语言 如何删除JSON中键和值之间不需要的字符?

fquxozlt  于 2023-10-14  发布在  Go
关注(0)|答案(2)|浏览(139)

JSON是这样的:{"key1": "value1", \n \n "key2": "value2\nwithnewline"}
我想要:
1.删除\n \n
1.用新行保持值2\n
所以我会有一个有效的JSON。
我尝试的是:regrex但是没有弄清楚如何指定键和值的外部。
还有这个

package main

import (
    "bytes"
    "fmt"
)

func main() {
    jsonStr := `{"key1": "value1", \n \n "key2": "value2\nwithnewline"}`
    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 playground:https://go.dev/play/p/zvNSCuE4SjQ
这不起作用,因为它可以\n实际上是\n

nue99wik

nue99wik1#

给定问题的参数,您可以使用strings.ReplaceAll替换所有\n\n:
cleaned := strings.ReplaceAll(input, "\\n \\n ", "")
如果你想继续使用你目前的策略,有几个问题。其中之一是,你总是写字符串,不管你的条件:cleaned.WriteByte(jsonStr[i])发生在if和else中。

lqfhib0f

lqfhib0f2#

你可以拆分和合并
包主
import(“fmt”“strings”)

func main() {
    jsonStr := `{"key1": "value1", \n \n "key2": "value2\nwithnewline"}`
    split := strings.Split(jsonStr, "\\n \\n")
    cleaned := strings.Join(split, " ")
    fmt.Println(cleaned)
}

相关问题