Comment gérer les entrées potentiellement « fausses » en JSON ? Discussion des alternatives
P粉161939752
P粉161939752 2023-09-10 09:35:21
0
2
570

Supposons que je ne sois pas sûr qu'il y ait des authorities(但如果存在,我希望选择它们)。如果没有选中的authorities,我希望jQuery选择authorities sélectionnés, qu'ils soient sélectionnés ou non (en fait, cela signifie récupérer la valeur de l'entrée masquée). Mes réflexions sur l'utilisation du concept "vraie valeur"/"fausse valeur" de JS pour gérer cette situation sont les suivantes :

    let user = {
        id: $(this).find('[name=id]').val(),
        username: $(this).find('[name=username]').val(),
        password: $(this).find('[name=password]').val(),
        name: $(this).find('[name=name]').val(),
        lastName: $(this).find('[name=lastName]').val(),
        department: $(this).find('[name=department]').val(),
        salary: $(this).find('[name=salary]').val(),
        age: $(this).find('[name=age]').val(),
        email: $(this).find('[name=email]').val(),
        enabledByte: $(this).find('[name=enabledByte]').val(),
        authorities: JSON.parse($(this).find('[name=authorities]:checked').val()) || 
                    JSON.parse($(this).find('[name=authorities]').val())
    };

Cependant, cela ne fonctionne pas. Fait intéressant, cela fonctionne dans l'extrait de code ci-dessous. Se pourrait-il que val()在匹配失败时返回的undefined不是“假值”吗?想想看!我最好的猜测是,当解析undefined时,JSON.parse() génère une erreur au lieu de renvoyer une "fausse valeur" que j'espère. Cette méthode n'accepte pas "param OR param", n'est-ce pas ?

Comment pensez-vous que je devrais fournir une solution de repli pour cette situation (en plus, bien sûr, de vérifier la "fausse valeur" des authorities sélectionnés individuellement, ce qui est un peu verbeux à mon goût) ?

 

<头>
<元字符集=“UTF-8”>


<标题>Page de gestion

<正文>
<标题> Nom Nom de famille Département E-mail <正文>

Remplissez le formulaire

<表格>
<标签=“名称”>Nom :
<脚本> $(document).ready(function() { $('form').on('submit', fonction asynchrone (événement) { event.preventDefault(); $('tbody').append( `` ); const SubmitButton = $(this).find('[type=submit]'); Forme constante = $(this); Soumettre le bouton.removeClass('btn-primary') .addClass('btn-succès') .attr('value', 'L'utilisateur a été ajouté !') .attr('type', 'bouton') .click(() => $('[href="#users-table"]').tab('show')); setTimeout(fonction(){ commitButton.removeClass('btn-succès') .addClass('btn-primaire') .attr('valeur', 'soumettre') .attr('type
P粉161939752
P粉161939752

répondre à tous(2)
P粉818306280

Le problème est que si le sélecteur ne trouve aucune correspondance, .val()返回undefined,而JSON.parse(undefined) il lève une exception.

Exécutez la solution de secours dans la liste d'arguments de JSON.parse() afin d'analyser toute valeur obtenue avec succès.

authorities: JSON.parse($(this).find('[name=authorities]:checked').val() || 
                        $(this).find('[name=authorities]:first').val())
P粉561323975

En fonction de votre utilisation, vous disposez de plusieurs options :

  1. Vous pouvez combiner comme ceci JSON.parse。这将使它在解析之前回退到其他字符串,因此如果第一个值是undefined,它不会出错。但是,如果两个值都是undefinedou l'un d'entre eux est un JSON invalide, ce qui provoquera une erreur.
JSON.parse($(this).find('[name=authorities]:checked').val()) || $(this).find('[name=authorities]').val());
  1. Si vous savez que les valeurs sont soit un JSON valide, soit undefined,您可以回退到nullnullune valeur JSON valide, elles peuvent être analysées. Cependant, si l'une des valeurs JSON n'est pas valide, une erreur se produira toujours.
JSON.parse($(this).find('[name=authorities]:checked').val()) || $(this).find('[name=authorities]').val() || null);
  1. S'il y a une chance que l'une ou l'autre des valeurs soit un JSON invalide, vous pouvez l'entourer d'un bloc try/catch. De cette façon, même s’il n’est pas valide, aucune erreur ne sera générée. C'est l'option la plus sûre et elle ne se trompera jamais.
// Helper to make it easier to do this inline
function safeJsonParse(string) {
  try {
    return JSON.parse(string);
  } catch {
    // JSON is invalid. Will implicitly return undefined.
  }
}

safeJsonParse($(this).find('[name=authorities]:checked').val()) || safeJsonParse($(this).find('[name=authorities]').val())
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
Jean Département américain de l'énergie IT john_d@gmail.com
Jane Département américain de l'énergie Ressources humaines jane_d@gmail.com
${$(this).find('[name=name]').val()} ${$(this).find('[name=last-name]').val()} ${$(this).find('[name=department]').val()} ${$(this).find('[name=email]').val() || 'Non applicable'}