1
votes

Comment puis-je remplacer les valeurs correspondant à une certaine clé dans un wrapper JSON dans une QueryString?

J'ai:

queryString=`key_value="something"&type_name=user&value={"password":"Test1234"}&key_attribute=guid`

Je souhaite remplacer le mot de passe de Test1234 par [HIDDEN] .


0 commentaires

4 Réponses :


3
votes

Si vous êtes dans node, vous pouvez simplement analyser puis stringifier la chaîne de requête

var qs=require("querystring")
var temp=qs.parse(queryString)
var user=JSON.parse(temp.value)
user.password='[HIDDEN]'
temp.value=JSON.stringify(user)
queryString=qs.stringify(temp)

Browserify a également une implémentation de chaîne de requête, mais vous souhaitez également utiliser regexp

p>


0 commentaires

2
votes

Une façon d'y parvenir est:

let queryString=`key_value="something"&type_name=user&value={"password":"Test1234"}&key_attribute=guid`

let modifiedString = queryString.replace(/("password":)"[\w]+"/, '$1"[HIDDEN]"')

console.log(modifiedString)


0 commentaires

2
votes

Utilisez URLSearchParams a > interface pour créer un objet itérable à partir de la chaîne de requête. Sélectionnez la valeur que vous souhaitez modifier avec le get ( ) de l'objet et analyser la valeur d'un objet en utilisant JSON.parse .

Vous avez maintenant la valeur en tant qu'objet à partir duquel vous pouvez mettre à jour la valeur de la propriété password .

Utilisez le développeur set () pour écraser la valeur code > entrée de la chaîne de requête et redéfinissez l'objet en JSON.

Transformez l'objet URLSearchParams en une chaîne avec Méthode toString () .

const queryString=`key_value="something"&type_name=user&value={"password":"Test1234"}&key_attribute=guid`;
const params = new URLSearchParams(queryString);
const value = params.get('value');
const objectValue = JSON.parse(value);

objectValue.password = '[HIDDEN]';
params.set('value', JSON.stringify(objectValue));

const updatedQueryString = params.toString();
console.log(updatedQueryString);


0 commentaires

2
votes

Bien qu'il existe de nombreux packages qui peuvent être utilisés pour résoudre ce problème, je suggère d'apprendre à le résoudre brut.

Les solutions ci-dessous vous aideront à comprendre comment faire les choses

const queryString = `key_value="something"&type_name=user&value={"password":"Test1234"}&key_attribute=guid`;


// SOLUTION 1
// convert string to object, change key, and convert back to string
const jsonString = queryString
  .split('&')
  .reduce((acc, next) => {
    const [key, value] = next.split('=');
    acc[key] = value.indexOf('{') === 0 ? JSON.parse(value) : value;
    return acc
  }, {})

jsonString.value.password = '[HIDDEN]'

const solution1 = Object.keys(jsonString).map(key => {
  const val = typeof jsonString[key] === 'object' ? JSON.stringify(jsonString[key]) : jsonString[key]
  return `${key}=${val}`

}).join('&')



// SOLUTION 2
// Simply replace by regex using strict parameter
const solution2 = queryString.replace(/&value={"password":"(\w+)"}&/gi, '[HIDDEN]')

console.log('Using JSON.parse:', solution1)
console.log('Using regex:', solution2)


0 commentaires