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

Go Playground - The Go Programming Language

这种映射是否可能实现?还是我应该在字符串中添加逗号和引号? 任何帮助都将不胜感激。


更多关于Golang如何将未格式化的字符串转换为JSON的实战教程也可以访问 https://www.itying.com/category-94-b0.html

4 回复

太好了!!

更多关于Golang如何将未格式化的字符串转换为JSON的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


感谢您的帮助。现在运行正常了。

直接实现是不可能的,因为该字符串不是有效的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.Unmarshaljson.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。无需手动添加逗号或引号到原始字符串。

回到顶部