Golang如何将未格式化的字符串转换为JSON
Golang如何将未格式化的字符串转换为JSON 我想将这样的字符串转换:
1:S 2:L 3:I 4:I 5:I 6:I 7:I 8:I 9:I 10:I 11:I 12:L 13:I 14:I 15:I 16:I
转换为JSON结构体
type Item struct {
Id int
Status string
}
我的代码如下:
package main
import (
"fmt"
"encoding/json"
)
type Item struct {
Id int
Status string
}
var str = "1:I 2:I 3:I 4:I 5:I 6:I 7:I 8:I 9:I 10:I 11:I 12:L 13:I 14:I 15:I 16:I"
func main() {
fmt.Println(str)
var results []map[string]interface{}
json.Unmarshal([]byte(str), &results)
out, _ := json.Marshal(results)
println(string(out))
}

Go Playground - The Go Programming Language
这种映射是否可能实现?还是我应该在字符串中添加逗号和引号? 任何帮助都将不胜感激。
更多关于Golang如何将未格式化的字符串转换为JSON的实战教程也可以访问 https://www.itying.com/category-94-b0.html
4 回复
感谢您的帮助。现在运行正常了。
直接实现是不可能的,因为该字符串不是有效的JSON字符串。 但你可以处理该字符串并构建一个Item切片。类似这样:
func string2Item(str string) []Item {
data := strings.Split(str, " ")
len := len(data)
result := make([]Item, len)
for i:=0; i < len; i++ {
value := data[i]
tokens := strings.Split(value, ":")
id, _ := strconv.Atoi(tokens[0])
result[i] = Item{ Id : id, Status : tokens[1]}
}
return result
}
在你的main函数中:
results := string2Item(str)
out, _ := json.Marshal(results)
println(string(out))
是的,可以将未格式化的字符串转换为JSON,但需要先解析字符串并构建数据结构,而不是直接使用json.Unmarshal。json.Unmarshal要求输入是有效的JSON格式,而你的字符串是自定义格式。以下是解析字符串并转换为JSON的示例代码:
package main
import (
"encoding/json"
"fmt"
"strconv"
"strings"
)
type Item struct {
Id int
Status string
}
var str = "1:I 2:I 3:I 4:I 5:I 6:I 7:I 8:I 9:I 10:I 11:I 12:L 13:I 14:I 15:I 16:I"
func main() {
// 按空格分割字符串为键值对
pairs := strings.Split(str, " ")
var items []Item
for _, pair := range pairs {
// 按冒号分割每个键值对
parts := strings.Split(pair, ":")
if len(parts) != 2 {
continue // 跳过无效格式
}
// 解析ID
id, err := strconv.Atoi(parts[0])
if err != nil {
continue // 跳过无效ID
}
// 创建Item并添加到切片
items = append(items, Item{
Id: id,
Status: parts[1],
})
}
// 将items切片转换为JSON
jsonData, err := json.Marshal(items)
if err != nil {
fmt.Println("JSON marshaling error:", err)
return
}
fmt.Println(string(jsonData))
}
输出将是有效的JSON数组:
[{"Id":1,"Status":"I"},{"Id":2,"Status":"I"},{"Id":3,"Status":"I"},{"Id":4,"Status":"I"},{"Id":5,"Status":"I"},{"Id":6,"Status":"I"},{"Id":7,"Status":"I"},{"Id":8,"Status":"I"},{"Id":9,"Status":"I"},{"Id":10,"Status":"I"},{"Id":11,"Status":"I"},{"Id":12,"Status":"L"},{"Id":13,"Status":"I"},{"Id":14,"Status":"I"},{"Id":15,"Status":"I"},{"Id":16,"Status":"I"}]
这种方法通过分割字符串并解析每个部分来构建Item结构体切片,然后使用json.Marshal将其转换为JSON。无需手动添加逗号或引号到原始字符串。

