Maison  >  Questions et réponses  >  le corps du texte

Extraire les valeurs de la liste Python dans MYSQL

<p>J'ai une colonne dans une base de données MySQL qui contient une liste <code>python</code> de valeurs au format <code>json</code> <table class="s-table"> <tête> <tr> <th>Colonne</th> ≪/tr> ≪/tête> <corps> <tr> <td>[{"name": "moi", "color": "rouge"} , {"name": "vous", "color": "bleu"}]</td> ≪/tr> </tcorps> </tableau> <p>Je ne peux pas utiliser la fonction <code>json_extract()</code> car son format n'est pas exactement le même que <code>json</code></p> <p>Je souhaite extraire chaque <code>json</code> formaté dans une nouvelle colonne comme ceci : </p> <table class="s-table"> <tête> <tr> <th>Première colonne</th> <th>Deuxième colonne</th> ≪/tr> ≪/tête> <corps> <tr> <td>{"Nom": "I", "Couleur": "Rouge"}</td> <td>{"name":"vous","color":"bleu"}</td> ≪/tr> </tcorps> </table></p>
P粉153503989P粉153503989412 Il y a quelques jours470

répondre à tous(2)je répondrai

  • P粉311617763

    P粉3116177632023-09-05 18:49:35

    La requête suivante combinée aux fonctions de manipulation de chaînes SUBSTRING_INDEXREPLACECONCAT obtiendra les résultats attendus.

    SELECT 
      CONCAT('{', REPLACE(SUBSTRING_INDEX(SUBSTRING_INDEX(`column`, '}', 1), '{', -1), '\"', '"'), '}') AS First_column,
      CONCAT('{', REPLACE(SUBSTRING_INDEX(SUBSTRING_INDEX(`column`, '}', 2), '{', -1), '\"', '"'), '}') AS Second_column
    FROM mytable;

    Voici une démo fonctionnelle

    utilisant DBFIDDLE

    Cela me donne le résultat attendu :

    Première chronique Deuxième colonne
    {"nom": "i", "color": "rouge"} {"name": "vous", "color": "bleu"}

    Veuillez remplacer mytable 替换为 your_actual_table_name,并将 column par le nom réel de votre colonne. J'ai entouré les colonnes de backticks car column est un mot-clé réservé en SQL.

    répondre
    0
  • P粉445714413

    P粉4457144132023-09-05 17:11:12

    Vous devriez pouvoir utiliser JSON_EXTRACT sur les exemples de colonnes inclus dans la question :

    SET @column = '[{"name":"me","color":"red"} , {"name":"you","color":"blue"}]';
    
    SELECT
        JSON_EXTRACT(@column, '$[0]') AS First_column,
        JSON_EXTRACT(@column, '$[1]') AS Second_column;
    

    Sortie :

    Première chronique Deuxième colonne
    {"nom": "moi", "couleur": "rouge"} {"nom": "vous", "couleur": "bleu"}

    répondre
    0
  • Annulerrépondre