Fixed number parsing as float bug in JSON #1756

This commit is contained in:
Mike Farah 2023-09-19 09:42:07 +10:00
parent 0a0182da13
commit e09779e004
2 changed files with 12 additions and 4 deletions

View File

@ -54,8 +54,16 @@ func (dec *jsonDecoder) convertToYamlNode(data *orderedMap) (*yaml.Node, error)
case nil: case nil:
return createScalarNode(nil, "null"), nil return createScalarNode(nil, "null"), nil
case float64, float32: case float64, float32:
// json decoder returns ints as float. // json decoder returns ints as float.'
return parseSnippet(fmt.Sprintf("%v", rawData)) intNum := int(rawData.(float64))
// if the integer representation is the same as the original
// then its an int.
if float64(intNum) == rawData.(float64) {
return createScalarNode(intNum, fmt.Sprintf("%v", intNum)), nil
}
return createScalarNode(rawData, fmt.Sprintf("%v", rawData)), nil
case int, int64, int32, string, bool: case int, int64, int32, string, bool:
return createScalarNode(rawData, fmt.Sprintf("%v", rawData)), nil return createScalarNode(rawData, fmt.Sprintf("%v", rawData)), nil
case []*orderedMap: case []*orderedMap:

View File

@ -198,8 +198,8 @@ var jsonScenarios = []formatScenario{
{ {
description: "numbers", description: "numbers",
skipDoc: true, skipDoc: true,
input: "[3, 3.0, 3.1, -1]", input: "[3, 3.0, 3.1, -1, 999999, 1000000, 1000001, 1.1]",
expected: "- 3\n- 3\n- 3.1\n- -1\n", expected: "- 3\n- 3\n- 3.1\n- -1\n- 999999\n- 1000000\n- 1000001\n- 1.1\n",
scenarioType: "decode-ndjson", scenarioType: "decode-ndjson",
}, },
{ {