0
votes

Parse Json Inside Array Rails

J'ai une colonne de tableau dans la base de données dans mon application Rails. Cette colonne stocke une gamme de hachages. Mais ils sont stockés comme une chaîne à l'intérieur d'un tableau. Je veux les convertir en hachage.

Valeur de la colonne de base de données. Cartes P>

 JSON::ParserError (767: unexpected token at '{:card_number=>"12345678", :card_pin=>"12345", :validity=>Sat, 01 Feb 2020, :amount=>100}')


1 commentaires

Ce n'est pas Json. Êtes-vous responsable de sérialiser le contenu? Cela semble un simple inspecter (convertit le hachage en chaîne)? Utilisation de .to_json aurait été beaucoup mieux.


3 Réponses :


0
votes

Pas la réponse complète, mais cette date valeur : validité => SAT, 01 févr. 202 doit être échappé:
: validité => \ "SAT, 01 février 2020 \" . Ensuite, vous pourriez juste faire eval (cartes [0]) .

Mais gardez à l'esprit que l'utilisation de eval peut être un trou de sécurité, quelqu'un peut exécuter un code malveillant.


1 commentaires

eval a un trou de sécurité. Donc, je ne peux pas l'utiliser dans mon code. Toute autre option?



1
votes

Ceci est juste stupide. N'utilisez pas de colonnes de tableau pour stocker les hachages. Les colonnes Array sont une solution pour les scénarios spéciaux de cas lorsque vous souhaitez stocker des types de scalaires simples (chaînes, chiffres) dans un tableau. Il ne devrait pas être votre goto "confiture de chaque type de panneaux indésirables".

Et encore plus important encore, n'utilisez pas de tableaux / HSTORE / JSE / JSON / JSONB vers des données de modèle qui devraient avoir sa propre table. Ils sont bons pour des cas spéciaux où vous avez des données qui ne correspondent pas vraiment à un schéma fixe, mais ne devraient pas être le moyen par défaut de faire quoi que ce soit.

Juste en regardant ce hachage, vous pouvez voir que les données ont en fait un schéma assez défini et peuvent être très facilement modélisés par la mise en place d'une table et d'une association unique. Cela vous permettra de poser efficacement les données et vous donnera une intégrité référentielle.

Les numéros de carte d'enregistrement supplémentaires et les codes PIN en clair est simplement irresponsable. Si vous avez une brèche de base de données et que les assaillants s'éloignent d'une grande liste de numéros CC, vous pouvez être tenu responsable.


0 commentaires

0
votes

Je devais simplement convertir le hachage en Json avant de la pousser dans le tableau et la sauvegarder. xxx

puis lors de la récupération, je pouvais simplement faire ce qui suit. xxx


0 commentaires