Массив JSON unmarshal не работает, но те же данные работают на JavaScript - PullRequest
0 голосов
/ 21 марта 2019

Я пытаюсь поместить некоторые значения массива в строку JSON, куда я отправляю браузер и в браузере работает нормально, чтобы динамически добавлять некоторые поля ввода, но когда я пытаюсь проверить данные из этих новых полей на Go, я пытаюсьдемонтирует те же данные, но не работает, потому что значения пусты.

Это код:

package main

import "fmt"
import "encoding/json"


type PublicKey struct {
        Name        string   `json:"name"`
        Type        string   `json:"type"`
    Description string   `json:"description"`
    Values      []string `json:"values"`
}


func main() {

keysBody := []byte(`    
[
   [
      {
         "name":"fecha_inicio",
         "type":"date",
         "description":"Fecha de Inicio",
         "values":[
            ""
         ]
      }
   ],
   [
      {
         "name":"fecha_final",
         "type":"date",
         "description":"Fecha Final",
         "values":[
            ""
         ]
      }
   ],
   [
      {
         "name":"username",
         "type":"select",
         "description":"Usuario",
         "values":[
            "admin",
            "gus"
         ]
      }
   ]
]
`)


    keys := make([]PublicKey,0)
    json.Unmarshal(keysBody, &keys)
    fmt.Printf("%#v", keys)




}

https://play.golang.org/p/kKT3IN4_8vb

Это результат:

[]main.PublicKey{main.PublicKey{Name:"", Type:"", Description:"", Values:[]string(nil)}, main.PublicKey{Name:"", Type:"", Description:"", Values:[]string(nil)}, main.PublicKey{Name:"", Type:"", Description:"", Values:[]string(nil)}}

Это тот же код в javascript, работающий нормально:

parameterData содержит ту же строку JSON

        var jsonMenus = JSON.parse(parameterData);     
        for (let i = 0; i < jsonMenus.length; i++) {
            let arr = jsonMenus[i];
            for (let j = 0; j < arr.length; j++) {
                //New DIV
                var newDiv = document.createElement("div");
                newDiv.setAttribute("class","w3-quarter");
                //console.log(arr[j].name + ' ' + arr[j].type + ' ' + arr[j].description);
                var label = document.createElement("Label");
                label.innerHTML = arr[j].description;
                label.setAttribute("class","w3-label");
                newDiv.appendChild(label);
                if (arr[j].type != 'select') {
                    var input = document.createElement("input");
                    input.type = arr[j].type;
                    input.name = arr[j].name;
                    input.setAttribute("class","w3-input w3-border w3-round");
                    newDiv.appendChild(input);
                } else {
                    var select = document.createElement("select");
                    select.name = arr[j].name;
                    var values = arr[j].values
                    for (let k = 0; k < values.length; k++) {
                        opt = document.createElement('option');
                        opt.value = values[k];
                        opt.innerHTML = values[k];
                        select.appendChild(opt);
                    }
                    select.setAttribute("class","w3-input w3-border w3-round");
                    newDiv.appendChild(select);
                }
                container.appendChild(newDiv);

Может кто-нибудь может помочь иметьстрока JSON, работающая в обоих местах?

1 Ответ

1 голос
/ 21 марта 2019

Ваш json - это двумерный массив, но вы пытаетесь разархивировать массив одного измерения.

Вам нужно разархивировать на [][]PublicKey, вот настроенная игровая площадка: https://play.golang.org/p/ykzzqtSPJCU.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...