123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- package tablib
- import (
- "encoding/json"
- )
- // LoadJSON loads a dataset from a YAML source.
- func LoadJSON(jsonContent []byte) (*Dataset, error) {
- var input []map[string]interface{}
- if err := json.Unmarshal(jsonContent, &input); err != nil {
- return nil, err
- }
- return internalLoadFromDict(input)
- }
- // LoadDatabookJSON loads a Databook from a JSON source.
- func LoadDatabookJSON(jsonContent []byte) (*Databook, error) {
- var input []map[string]interface{}
- var internalInput []map[string]interface{}
- if err := json.Unmarshal(jsonContent, &input); err != nil {
- return nil, err
- }
- db := NewDatabook()
- for _, d := range input {
- b, err := json.Marshal(d["data"])
- if err != nil {
- return nil, err
- }
- if err := json.Unmarshal(b, &internalInput); err != nil {
- return nil, err
- }
- if ds, err := internalLoadFromDict(internalInput); err == nil {
- db.AddSheet(d["title"].(string), ds)
- } else {
- return nil, err
- }
- }
- return db, nil
- }
- // JSON returns a JSON representation of the Dataset as an Exportable.
- func (d *Dataset) JSON() (*Exportable, error) {
- back := d.Dict()
- b, err := json.Marshal(back)
- if err != nil {
- return nil, err
- }
- return newExportableFromBytes(b), nil
- }
- // JSON returns a JSON representation of the Databook as an Exportable.
- func (d *Databook) JSON() (*Exportable, error) {
- b := newBuffer()
- b.WriteString("[")
- for _, s := range d.sheets {
- b.WriteString("{\"title\": \"" + s.title + "\", \"data\": ")
- js, err := s.dataset.JSON()
- if err != nil {
- return nil, err
- }
- b.Write(js.Bytes())
- b.WriteString("},")
- }
- by := b.Bytes()
- by[len(by)-1] = ']'
- return newExportableFromBytes(by), nil
- }
|