L'éditeur php Baicao peut rencontrer un message d'erreur lors de l'utilisation de la base de données PHP et PostgreSQL : "Impossible de lire la plage json en tant que pgtype.Int4range". Cette erreur se produit généralement lors de la tentative de conversion du type de données JSON en type de données pgtype.Int4range. La solution à ce problème n'est pas compliquée. Il vous suffit de convertir les données JSON en chaîne, puis d'effectuer une conversion de type de données. Nous détaillerons ensuite comment résoudre ce problème.
J'essaie de lire une plage dans json mais j'ai du mal à faire json.unmarshal.
Ceci est un code de test-
import ( "encoding/json" "testing" "github.com/jackc/pgtype" "github.com/stretchr/testify/assert" ) type testhealthpreference struct { healthrange pgtype.int4range `json:"health_range"` id string `json:"id"` } // just a test to make sure unmarshaling works func testpreferenceupdateunmarshal(t *testing.t) { jsondata := `{ "health_range": "[20,30)", "id": "123" }` var update testhealthpreference err := json.unmarshal([]byte(jsondata), &update) if err != nil { t.errorf("error while unmarshalling json: %v", err) } assert.equal(t, 20, update.healthrange.lower) }
Erreur-
Error while unmarshalling JSON: json: cannot unmarshal string into Go struct field TestPreference.health_range of type pgtype.Int4range.
Est-il possible de le lire sous la forme pgtype.int4range ? Je suppose que ce type est uniquement destiné à la base de données ? fwiw, j'utilise pgx github.com/jackc/pgx/v4
Cela ne fonctionne pas car "[20,30)"
不是结构 pgtype.int4range
a une valeur json valide et pgtype.int4range n'implémente pas l'interface json.unmarshaler encore.
Vous devez implémenter vous-même l'interface pour désorganiser "[20,30)"
:
type myint4range pgtype.int4range func (r *myint4range) unmarshaljson(b []byte) error { return (*pgtype.int4range)(r).decodetext(nil, bytes.trim(b, `"`)) }
Au fait
assert.equal(t, 20, update.healthrange.lower)
En comparant deux types différents, doit être corrigé comme suit :
assert.Equal(t, int32(20), update.HealthRange.Lower.Int)
Voir la démo complète ici : //m.sbmmt.com/link/fbf6e9ffad68f73e466198206987dedc一个>.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!