J'essaie la nouvelle API pour mysql 5.7 qui traite des colonnes JSON. Ma test
colonne ressemble à ceci:mysql 5.7 ajout de la clé/valeur à l'objet json imbriqué
{"foo":{"efg":1}, "bar":{"abc":0}}
Ce que je voudrais faire est append à l'une des clés, par exemple foo
il se traduira par "foo":{"efg":1, "klm":2}
. Ce que j'ai essayé jusqu'à la suite their documentation:
mysql> select json_insert(test, '$.foo', 10, '$.foo.klm', 2) from table1
where name='Joe';
Qu'est-ce qui ne fait remplacer "efg":1
et le résultat est "foo":{"klm":2}
.
mysql> select json_array_append(test, '$.foo', '{"klm":2}') from table1 where
name="Joe';
La ligne ci-dessus convertit évidemment foo
dans un tableau "foo":[{"efg":1}, {"klm":2}]
, ce qui est pas ce que je veux.
J'ai essayé de combiner les requêtes ensemble:
mysql> select json_insert(test, '$.foo', 10, '$.foo',
select json_merge(select json_extract(test, '$.foo') from table1
where name="Joe"), '{"klm":2}') from table1 where name="Joe";
Ce me donne juste une erreur de syntaxe near select json_extract(test, '$.foo')
.
Un conseil serait grandement apprécié.
@JoachimIsaksson le résultat souhaité doit être '{ "foo": { "efg": 1, "klm": 2}," bar ": {" abc ": 0}}'. Leur documentation fonctionne principalement avec des tableaux modifiants, mais je voudrais garder tout comme un objet. – denikov
J'obtiens ce résultat exact en utilisant votre 'json_insert', ou juste' select json_insert (test, '$ .foo.klm', 2) de table1 où name = 'Joe'; '' "efg": 1' ne –
@JoachimIsaksson Je ne sais pas où est le problème, j'ai émis des paramètres, comme dans votre commentaire, et cela remplace tout ce qui concerne l'objet '' foo' '' – denikov