go.jsonvalue icon indicating copy to clipboard operation
go.jsonvalue copied to clipboard

Boolean value support

Open ilessy opened this issue 1 year ago • 2 comments

  archived: false,

对于这种值好像Marshal的时候会丢失.变成:

  "archived":  ,

请问是哪个option可以控制的吗

ilessy avatar Apr 28 '24 08:04 ilessy

看起来是 bug。

  1. 请问能贴出具体的 case 吗?
  2. 看看能不能考虑 OptIgnoreOmitempty

Andrew-M-C avatar Apr 29 '24 04:04 Andrew-M-C

我传入的是数组如下:

data []*jsonvalue.V

尝试使用:

v := jsonvalue.NewObject()
v.MustSet(data).At("data")

此方法导致MustMarshalString时候true/false丢失.

现在我参考文档上的方法:

v := jsonvalue.NewObject()

for i := range data {
	v.MustSet(data[i]).At("data", i)
}

此时在MustMarshalString时true/false没有再丢失了.

ilessy avatar Apr 29 '24 06:04 ilessy

好的,我尽快修复哈

Andrew-M-C avatar Apr 30 '24 01:04 Andrew-M-C

@ilessy 大佬请问能不能把你的完整 case 贴给我呀?我看你的描述,试了一下好像没问题。应该是我理解不对?

https://go.dev/play/p/fxJOpR6MTld

package main

import (
	"fmt"

	jsonvalue "github.com/Andrew-M-C/go.jsonvalue"
)

func main() {
	data := jsonvalue.NewArray()
	data.MustSet(false).At(0, "archived")
	data.MustSet(false).At(1, "archived")

	v := jsonvalue.NewObject()
	v.MustSet(data).At("data")

	fmt.Println(v.MustMarshalString())
}

Andrew-M-C avatar Apr 30 '24 14:04 Andrew-M-C

@Andrew-M-C 不好意思大神, 因为是处理API的, 所以我直接模拟一下responseBody

package main

import (
	"fmt"
	"os"

	jsonvalue "github.com/Andrew-M-C/go.jsonvalue"
)

const bodyString = `{
    "data": [
        {
            "basicInfo": {
                "applicationId": 200228827,
                "archived": true,
                "invitationUpdateStatus": 0
            }
        },
		{
            "basicInfo": {
                "applicationId": 200228828,
                "archived": false,
                "invitationUpdateStatus": 0
            }
        }
    ]
}`

var bodyBytes = []byte(bodyString)

func main() {

	var candidateInfoArr []*jsonvalue.V

	responseData, err := makeRequest()
	if err != nil {
		fmt.Println("Error making initial request:", err)
		return
	}

	candidateInfoArr = append(candidateInfoArr, responseData.ForRangeArr()...)

	saveToFile("candidateInfos.json", candidateInfoArr)
}

func makeRequest() (*jsonvalue.V, error) {

	// 解码响应体
	responseDataArr, err := jsonvalue.MustUnmarshalString(string(bodyBytes)).Get("data")
	if err != nil {
		return nil, err
	}

	return responseDataArr, nil
}

// 将数据保存到文件
func saveToFile(filename string, data []*jsonvalue.V) {

	file, err := os.Create(filename)
	if err != nil {
		fmt.Println("Error creating file:", err)
		return
	}
	defer file.Close()

	v := jsonvalue.NewObject()

	v.MustSet(data).At("data")

	_, err = file.WriteString(v.MustMarshalString(jsonvalue.OptSetSequence(), jsonvalue.OptUTF8()))

	if err != nil {
		fmt.Println("Error writing data to file:", err)
	}

}

结果丢失true/false:

{
    "data": [
        {
            "basicInfo": {
                "applicationId": 200228827,
                "archived": ,
                "invitationUpdateStatus": 0
            }
        },
        {
            "basicInfo": {
                "applicationId": 200228828,
                "archived": ,
                "invitationUpdateStatus": 0
            }
        }
    ]
}

ilessy avatar May 06 '24 01:05 ilessy

我在 feature/v1.3.8 分支修复了哈,大佬有空的话验证下?如果没问题的话我就打一个新的 tag

Andrew-M-C avatar May 07 '24 12:05 Andrew-M-C

@Andrew-M-C 已测试feature/v1.3.8 调用API后可以正常显示bool值了, 非常感谢, 希望下次可以直接帮大佬修bug

ilessy avatar May 08 '24 01:05 ilessy

done, 已发布 v1.3.8 这个包开发好久了,从我刚开始用 Go 到现在,可读性不佳 花了我好大力气才把 codebeat 评分压到刚过 B😂

欢迎提改善意见哈~~

Andrew-M-C avatar May 08 '24 02:05 Andrew-M-C