Skip to content

Commit b14f95d

Browse files
committed
Process Map values from JSON and XML files
1 parent 2161632 commit b14f95d

File tree

6 files changed

+149
-0
lines changed

6 files changed

+149
-0
lines changed

files.go

+71
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
package mxj
2+
3+
import (
4+
"fmt"
5+
"io"
6+
"os"
7+
)
8+
9+
// ReadMapsFromXmlFile - creates an array from a file of JSON values.
10+
func ReadMapsFromJsonFile(name string) ([]Map, error) {
11+
fi, err := os.Stat(name)
12+
if err != nil {
13+
return nil, err
14+
}
15+
if !fi.Mode().IsRegular() {
16+
return nil, fmt.Errorf("file %s is not a regular file", name)
17+
}
18+
19+
fh, err := os.Open(name)
20+
if err != nil {
21+
return nil, err
22+
}
23+
defer fh.Close()
24+
25+
am := make([]Map,0)
26+
for {
27+
m, raw, err := NewMapJsonReaderRaw(fh)
28+
if err != nil && err != io.EOF {
29+
return am, fmt.Errorf("error: %s - reading: %s", err.Error(), string(raw))
30+
}
31+
if len(m) > 0 {
32+
am = append(am, m)
33+
}
34+
if err == io.EOF {
35+
break
36+
}
37+
}
38+
return am, nil
39+
}
40+
41+
// ReadMapsFromXmlFile - creates an array from a file of XML values.
42+
func ReadMapsFromXmlFile(name string) ([]Map, error) {
43+
fi, err := os.Stat(name)
44+
if err != nil {
45+
return nil, err
46+
}
47+
if !fi.Mode().IsRegular() {
48+
return nil, fmt.Errorf("file %s is not a regular file", name)
49+
}
50+
51+
fh, err := os.Open(name)
52+
if err != nil {
53+
return nil, err
54+
}
55+
defer fh.Close()
56+
57+
am := make([]Map,0)
58+
for {
59+
m, raw, err := NewMapXmlReaderRaw(fh)
60+
if err != nil && err != io.EOF {
61+
return am, fmt.Errorf("error: %s - reading: %s", err.Error(), string(raw))
62+
}
63+
if len(m) > 0 {
64+
am = append(am, m)
65+
}
66+
if err == io.EOF {
67+
break
68+
}
69+
}
70+
return am, nil
71+
}

files_test.badjson

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
{ "this":"is", "a":"test", "file":"for", "files_test.go":"case" }
2+
{ "with":"some", "bad":JSON, "in":"it" }

files_test.badxml

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<doc>
2+
<some>test</some>
3+
<data>for files.go</data>
4+
</doc>
5+
<msg>
6+
<just>some</just>
7+
<another>doc</other>
8+
<for>test case</for>
9+
</msg>

files_test.go

+56
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package mxj
2+
3+
import (
4+
"fmt"
5+
"testing"
6+
)
7+
8+
func TestReadFileHeader(t *testing.T) {
9+
fmt.Println("\n---------------- files_test.go ...\n")
10+
}
11+
12+
func TestReadJsonFile(t *testing.T) {
13+
fmt.Println("ReadMapsFromJsonFile()")
14+
am, err := ReadMapsFromJsonFile("files_test.json")
15+
if err != nil {
16+
t.Fatal(err.Error())
17+
}
18+
for _, v := range am {
19+
fmt.Printf("%v\n", v)
20+
}
21+
22+
am, err = ReadMapsFromJsonFile("nil")
23+
if err == nil {
24+
t.Fatal("no error returned for read of nil file")
25+
}
26+
fmt.Println("caught error: ", err.Error())
27+
28+
am, err = ReadMapsFromJsonFile("files_test.badjson")
29+
if err == nil {
30+
t.Fatal("no error returned for read of badjson file")
31+
}
32+
fmt.Println("caught error: ", err.Error())
33+
}
34+
35+
func TestReadXmFile(t *testing.T) {
36+
fmt.Println("ReadMapsFromXmlFile()")
37+
am, err := ReadMapsFromXmlFile("files_test.xml")
38+
if err != nil {
39+
t.Fatal(err.Error())
40+
}
41+
for _, v := range am {
42+
fmt.Printf("%v\n", v)
43+
}
44+
45+
am, err = ReadMapsFromXmlFile("nil")
46+
if err == nil {
47+
t.Fatal("no error returned for read of nil file")
48+
}
49+
fmt.Println("caught error: ", err.Error())
50+
51+
am, err = ReadMapsFromXmlFile("files_test.badxml")
52+
if err == nil {
53+
t.Fatal("no error returned for read of badjson file")
54+
}
55+
fmt.Println("caught error: ", err.Error())
56+
}

files_test.json

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
{ "this":"is", "a":"test", "file":"for", "files_test.go":"case" }
2+
{ "with":"just", "two":2, "JSON":"values", "true":true }

files_test.xml

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<doc>
2+
<some>test</some>
3+
<data>for files.go</data>
4+
</doc>
5+
<msg>
6+
<just>some</just>
7+
<another>doc</another>
8+
<for>test case</for>
9+
</msg>

0 commit comments

Comments
 (0)