Skip to content

Commit 5e2469f

Browse files
authored
Merge pull request #7 from yukithm/fix/issue-6
Fix a problem when the key contains whitespaces (issue #6)
2 parents 4bd1834 + f7f18b0 commit 5e2469f

File tree

5 files changed

+70
-4
lines changed

5 files changed

+70
-4
lines changed

.travis.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
language: go
22
go:
3-
- 1.12.x
3+
- 1.15.x
44
- tip
55
sudo: false
66
env:

csv_writer_test.go

+42
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package json2csv_test
2+
3+
import (
4+
"bytes"
5+
"testing"
6+
7+
"github.com/yukithm/json2csv"
8+
)
9+
10+
func TestKeyWithTrailingSpace(t *testing.T) {
11+
b := &bytes.Buffer{}
12+
wr := json2csv.NewCSVWriter(b)
13+
responses := []map[string]interface{}{
14+
{
15+
" A": 1,
16+
"B ": "foo",
17+
"C ": "FOO",
18+
},
19+
{
20+
" A": 2,
21+
"B ": "bar",
22+
"C ": "BAR",
23+
},
24+
}
25+
26+
csvContent, err := json2csv.JSON2CSV(responses) // csvContent seems to be complete!
27+
if err != nil {
28+
t.Fatal(err)
29+
}
30+
wr.WriteCSV(csvContent)
31+
wr.Flush()
32+
33+
got := b.String()
34+
want := `/ A,/B ,/C
35+
1,foo,FOO
36+
2,bar,BAR
37+
`
38+
39+
if got != want {
40+
t.Errorf("Expected %v, but %v", want, got)
41+
}
42+
}

go.mod

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
module github.com/yukithm/json2csv
22

3-
go 1.12
3+
go 1.15
44

55
require (
66
github.com/mitchellh/gox v1.0.1

jsonpointer/jsonpointer.go

-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ type JSONPointer []Token
1313

1414
// New parses a pointer string and creates a new JSONPointer.
1515
func New(pointer string) (JSONPointer, error) {
16-
pointer = strings.TrimSpace(pointer)
1716
if pointer == "" {
1817
return JSONPointer{}, nil
1918
}

jsonpointer/jsonpointer_test.go

+26-1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,10 @@ var testNewCases = []struct {
1616
{`/foo~1bar`, []Token{`foo/bar`}, ``},
1717
{`/foo/bar`, []Token{`foo`, `bar`}, ``},
1818
{`/foo/0/bar`, []Token{`foo`, `0`, `bar`}, ``},
19+
{`/foo `, []Token{`foo `}, ``},
20+
{`/ foo`, []Token{` foo`}, ``},
21+
{`/ foo `, []Token{` foo `}, ``},
22+
{`/foo / bar `, []Token{`foo `, ` bar `}, ``},
1923
{`/`, []Token{""}, ``}, // empty string key
2024
{`//`, []Token{"", ""}, ``}, // empty string key
2125
{``, []Token{}, ``}, // whole content (root)
@@ -70,6 +74,11 @@ var testAppendCases = []struct {
7074
{`/foo~1bar`, `append`, `/foo~1bar/append`},
7175
{`/foo/bar`, `append`, `/foo/bar/append`},
7276
{`/foo/0/bar`, `append`, `/foo/0/bar/append`},
77+
{`/foo`, `append `, `/foo/append `},
78+
{`/foo`, ` append`, `/foo/ append`},
79+
{`/foo`, ` append `, `/foo/ append `},
80+
{`/foo `, `append`, `/foo /append`},
81+
{`/ foo`, `append`, `/ foo/append`},
7382
{`/`, `append`, `//append`},
7483
{`//`, `append`, `///append`},
7584
{``, `append`, `/append`},
@@ -99,6 +108,9 @@ var testPopCases = []struct {
99108
{`/foo~1bar`, `foo/bar`, ``},
100109
{`/foo/bar`, `bar`, `/foo`},
101110
{`/foo/0/bar`, `bar`, `/foo/0`},
111+
{`/ foo `, ` foo `, ``},
112+
{`/foo/ bar `, ` bar `, `/foo`},
113+
{`/ foo / bar `, ` bar `, `/ foo `},
102114
{`/`, ``, ``},
103115
{`//`, ``, `/`},
104116
{``, ``, ``},
@@ -150,6 +162,8 @@ var testStringsCases = []struct {
150162
{`/foo~1bar`, []string{`foo/bar`}},
151163
{`/foo/bar`, []string{`foo`, `bar`}},
152164
{`/foo/0/bar`, []string{`foo`, `0`, `bar`}},
165+
{`/ foo `, []string{` foo `}},
166+
{`/ foo / bar `, []string{` foo `, ` bar `}},
153167
{`/`, []string{""}}, // empty string key
154168
{`//`, []string{"", ""}}, // empty string key
155169
{``, []string{}}, // whole content (root)
@@ -177,6 +191,8 @@ var testEscapedStringsCases = []struct {
177191
{`/foo~1bar`, []string{`foo~1bar`}},
178192
{`/foo/bar`, []string{`foo`, `bar`}},
179193
{`/foo/0/bar`, []string{`foo`, `0`, `bar`}},
194+
{`/ foo `, []string{` foo `}},
195+
{`/ foo / bar `, []string{` foo `, ` bar `}},
180196
{`/`, []string{""}}, // empty string key
181197
{`//`, []string{"", ""}}, // empty string key
182198
{``, []string{}}, // whole content (root)
@@ -204,6 +220,8 @@ var testStringCases = []struct {
204220
{`/foo~1bar`, `/foo~1bar`},
205221
{`/foo/bar`, `/foo/bar`},
206222
{`/foo/0/bar`, `/foo/0/bar`},
223+
{`/ foo `, `/ foo `},
224+
{`/ foo / bar `, `/ foo / bar `},
207225
{`/`, `/`}, // empty string key
208226
{`//`, `//`}, // empty string key
209227
{``, ``}, // whole content (root)
@@ -232,6 +250,9 @@ var testDotNotationCases = []struct {
232250
{`/foo~1bar`, `foo/bar`, `foo/bar`},
233251
{`/foo/bar`, `foo.bar`, `foo.bar`},
234252
{`/foo/0/bar`, `foo.0.bar`, `foo[0].bar`},
253+
{`/ foo `, ` foo `, ` foo `},
254+
{`/ foo / bar `, ` foo . bar `, ` foo . bar `},
255+
{`/ foo /0/ bar `, ` foo .0. bar `, ` foo [0]. bar `},
235256
{`/`, ``, ``}, // empty string key
236257
{`//`, `.`, `.`}, // empty string key
237258
{``, ``, ``}, // whole content (root)
@@ -263,7 +284,10 @@ var testGetJSON = `{
263284
},
264285
"foo/bar": 1.23,
265286
"bar": true,
266-
"baz": null
287+
"baz": null,
288+
" foo ": {
289+
" bar ": 456
290+
}
267291
}`
268292
var testGetCases = []struct {
269293
pointer string
@@ -278,6 +302,7 @@ var testGetCases = []struct {
278302
{`/bar`, true, ``},
279303
{`/baz`, nil, ``},
280304
{`/boo`, nil, `Invalid JSON Pointer "/boo"`},
305+
{`/ foo / bar `, 456.0, ``},
281306
}
282307

283308
func TestGet(t *testing.T) {

0 commit comments

Comments
 (0)