0
votes

Analyser un objet JSON mixte avec JavaScript

J'ai un objet JSON que j'essaie d'analyser avec JavaScript, mais c'est un peu de désordre et je ne connais pas la meilleure façon de réaliser ce que je suis après. L'objet JSON est ci-dessous:

{
"type": 32,
"mental health": 32,
"question": 32,
"condition": 17,
"prevalence": 2,
"related issues": 3,
"types": 7,
"what is": 20,
"depression": 5,
"anxiety": 3,
"OCD": 2,
"Panic Disorder": 6,
"Scizophrenia": 1,
null: 19
}


5 commentaires

Ce n'est pas valide JSON. Êtes-vous capable de le corriger à la source?


Est-il correct que vous ne faites pas la distinction entre nom et de la valeur à la fin, mais vous souhaitez simplement inscrire la fréquence à laquelle certaines valeurs se produisent pour l'une ou l'autre des biens?


L'objet est syntaxe invalide. Vous ne pouvez pas utiliser un objet de tableau comme clé / nom d'une propriété pour un objet.


En fait, vous avez deux questions non liées ici, comment analyser JSON cassée (vous avez besoin d'un analyseur ou si le code a toujours l'air d'essayer d'utiliser regex pour le transformer en JSON approprié) et doit transformer la chose que vous voulez ce qui ne veut pas clairement comment ils sont liés.


Merci pour vos commentaires à tout le monde, j'ai eu des difficultés à réparer le JSON à la source car il arrive à travers une usine de données Azure qui semble être en mesure d'analyser JSON Un niveau profond


3 Réponses :


0
votes

Il semble être que vous voulez valeurs compte. Il n'y a pas correctement stricte, si oui, alors vous pouvez faire comme ça. XXX


0 commentaires

1
votes

J'ai pris la liberté de rendre vos données source dans une JS valide:

{
  null: 18,
  type: 39,
  'mental health': 37,
  question: 25,
  'what is': 15,
  types: 10,
  '...what is': 4,
  condition: 12,
  phobias: 4,
  help: 2,
  '...s': 4,
  schizophrenia: 4,
  '...uses': 2,
  depression: 4,
  '...ypes': 2
}


2 commentaires

Merci @dwelle - je vais faire des tests plus tard pour voir si je peux l'obtenir pour travailler dans mon code


Il suffit de tester et cela fonctionne parfaitement - une excellente solution, merci!



0
votes

Idéalement, vous voulez changer le JSON à la source afin qu'il soit valide. À défaut, voici une méthode qui détruit les mauvais caractères de la chaîne et analyse. Il utilise ensuite Réduire code > pour produire un objet avec les comptes appropriés pour chaque valeur d'objet disponible.

p>

const str = '{[null, "[{"name":"type","value":"mental health"},{"name":"question","value":"what is"}]", "[{"name":"type","value":"mental health"},{"name":"question","value":"what is"}]", "[{"name":"type","value":"mental health"},{"name":"question","value":"what is"}]", "[{"name":"type","value":"mental health"},{"name":"question","value":"what is"}]", "[{"name":"type","value":"mental health"},{"name":"question","value":"types"}]", "[{"name":"type","value":"mental health"},{"name":"question","value":"types"}]", "[{"name":"type","value":"mental health"},{"name":"…what is"},{"name":"condition","value":"phobias"}]", "[{"name":"type","value":"mental health"},{"name":"…what is"},{"name":"condition","value":"phobias"}]", "[{"name":"type","value":"mental health"},{"name":"question","value":"what is"}]", "[{"name":"type","value":"mental health"},{"name":"question","value":"what is"}]", "[{"name":"type","value":"help"}]", "[{"name":"type","value":"mental health"},{"name":"question","value":"what is"}]", "[{"name":"type","value":"mental health"},{"name":"question","value":"what is"}]", "[{"name":"type","value":"mental health"},{"name":"question","value":"what is"}]", "[{"name":"type","value":"mental health"},{"name":"question","value":"types"}]", "[{"name":"type","value":"mental health"},{"name":"question","value":"types"}]", "[{"name":"type","value":"help"}]", "[{"name":"type","value":"mental health"},{"name":"question","value":"what is"}]", "[{"name":"type","value":"mental health"},{"name":"question","value":"what is"}]", "[{"name":"type","value":"mental health"},{"name":"question","value":"types"}]", "[{"name":"type","value":"mental health"},{"name":"question","value":"types"}]", "[{"name":"type","value":"mental health"},{"name":"question","value":"what is"}]", "[{"name":"type","value":"mental health"},{"name":"question","value":"types"}]", "[{"name":"type","value":"mental health"},{"name":"question","value":"what is"}]", "[{"name":"type","value":"mental health"},{"name":"question","value":"types"}]", "[{"name":"type","value":"mental health"},{"name":"…what is"},{"name":"condition","value":"phobias"}]", "[{"name":"type","value":"mental health"},{"name":"…what is"},{"name":"condition","value":"phobias"}]", "[{"name":"type","value":"mental health"},{"name":"question","value":"what is"}]", "[{"name":"type","value":"mental health"},{"name":"question","value":"what is"}]", "[{"name":"type","value":"mental health"},{"name":"question","value":"types"}]", "[{"name":"type","value":"mental health"},{"name":"question","value":"types"}]", "[{"name":"type","value":"mental health"},{"name":"…s"},{"name":"condition","value":"schizophrenia"}]", "[{"name":"type","value":"mental health"},{"name":"…uses"},{"name":"condition","value":"depression"}]", "[{"name":"type","value":"mental health"},{"name":"…uses"},{"name":"condition","value":"depression"}]", "[{"name":"type","value":"mental health"},{"name":"…s"},{"name":"condition","value":"schizophrenia"}]", "[{"name":"type","value":"mental health"},{"name":"…ypes"},{"name":"condition","value":"depression"}]", "[{"name":"type","value":"mental health"},{"name":"…s"},{"name":"condition","value":"schizophrenia"}]", "[{"name":"type","value":"mental health"},{"name":"…s"},{"name":"condition","value":"schizophrenia"}]", "[{"name":"type","value":"mental health"},{"name":"…ypes"},{"name":"condition","value":"depression"}]", null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]}';

// Replace the failing quotes
const newstr = str.replace(/"\[|\]"/g, '');

// Remove the first and last characters to make the JSON parse, and parse it
const parsed = JSON.parse(newstr.substr(1, newstr.length - 2));

// `reduce` over the array
const result = parsed.reduce((acc, c) => {

  // If the current element isn't null and has a value property
  // extract the value and update the initial object
  if (c && c.value) {
    const { value } = c;
    acc[value] = (acc[value] || 0) + 1;
  }

  // Return the accumulator for the next iteration
  return acc;
}, {}); // <= initial object

console.log(result);


0 commentaires