2016-07-05 10 views
-1

Hallo ich eine Zeichenfolge haben, die so aussieht,Convert String Daten in JavaScript Object

ll: 11, kw: sw, wit: jajar 

Diese Daten können aus einer Google-Tabelle kommen, so ist dies die Art, wie sie Zeilen darstellen.

Ich möchte dies in JavaScript für die einfache Analyse umgewandelt werden. Ich habe folgendes versucht, aber anscheinend nicht funktioniert.

var mz = data.feed.entry[0].content.$t; //which is ll: 11, kw: sw, wit: jajar 
var text = "{"+ miz +"}" 
var json = JSON.parse(text) 

Dies gilt jedoch nicht, es zu JSON konvertieren und gibt mir die folgende Fehlermeldung,

SyntaxError: JSON.parse: unterminated string at line 1 column 35 of the JSON data

Wie kann ich konvertieren, eine solche Zeichenfolge zu JSON für die einfache Analyse? Ich habe auch versucht, die ext mit ",", aber das geben falsche Daten, wenn die Spalte enthielt ein "," in den Daten so Splitting ist auch keine gute Lösung.

Dank

+0

Um es zu einem gültigen json zu machen, müssen Sie whitespaces durch Anführungszeichen ersetzen (vorausgesetzt, es gibt nur einzelne whitespaces). Kommas sollten auch ersetzt werden:, -> ", –

+0

Diese Zeichenfolge ist nicht im JSON-Format. Sie brauchen mindestens geschweifte Klammern. Überprüfen Sie es mit JSONlint.com. – Sablefoste

+1

Kann es sein wie' wit: Hallo foo, ... ' – Rajesh

Antwort

-1

Sie so tun können:

var xx="ll: 11, kw: sw, wit: jajar"; 
 

 
xx=xx.split(","); 
 
var t={}; 
 
xx.forEach(function(x){ 
 
x=x.split(":"); 
 
t[x[0].trim()]=x[1].trim(); 
 
}); 
 

 
console.log(t);

+0

x [0] und x [1] sind die Werte, die von der Zeichenfolge getrennt sind. man wird Schlüssel und eine Daten –

+0

oh ja .. aktualisiert die ans. appitiate für den Vorschlag –

+0

wie ich schon sagte der Split kann einen Fehler geben, wenn Sie es nach Kommas teilen und wenn die Spalte ein Komma enthielt, dann gibt es falsche Daten. Ich habe das in der Frage erwähnt. – rksh

0

Sie müssen es richtig json machen.

var str = '11: 11, kw: sw, wit: jajar'; 
 
str = '{"' +str.replace(/ /gm,"").replace(/:/gm, '":"').replace(/,/gm,'","') + '"}'; 
 
console.log(str); 
 

 
var obj = JSON.parse(str); 
 

 
console.log(JSON.stringify(obj));

0

Sie das Format in JSON zwingen könnte (da es ähnlich ist), oder Sie können es einfach selbst analysieren:

var obj = "ll: 11, kw: sw, wit: jajar".split(", ") 
 
    .reduce(function(prev, curr) { 
 
     var keyValue = curr.split(": "); 
 
     var key = keyValue[0]; 
 
     var value = keyValue[1]; 
 
     var num = Number.parseFloat(value); 
 
     if (value === "true" || value === "false") { 
 
      return (prev[key] = value === "true", prev); 
 
     } else if (!Number.isNaN(num)) { 
 
      return (prev[key] = num, prev); 
 
     } 
 
     return (prev[key] = value, prev); 
 
    }, {}); 
 
console.log(obj);

Diese Boolesche erhalten sollte & Nummer Primitive sowie unter der Annahme, alles andere ist eine Zeichenfolge.

+0

Erneut teilen Sie ihn durch die Kommas, wenn Sie die Zeichenfolge durch Kommas trennen, wird es falsche Daten geben, als ob die Spalte ein Komma in den Daten enthalten würde. – rksh

+1

@rksh könnte das gleiche über einen Doppelpunkt gesagt werden. Aber es ist schwierig, sich ohne das Erfordernis von Escape-Sequenzen aus dem OP – CodingIntrigue

0

Alle String-Parameter in JSON String sollte zitiert werden.
Verwenden Sie den folgenden Ansatz mit String.replace und IsNaN Funktionen (integer Werte zu erhalten):

var mz = "ll: 11, kw: sw, wit: jajar", 
    text = "{" + mz.replace(/(\w+?):\s?([^,]+)(,?)/g, function (m, p1, p2, p3) { 
      var val = Number(p2); // check for integer value 
      return '"' + p1 + '":' + (isNaN(val)? '"'+p2+'"' : val) + p3; 
     }) + "}"; 

console.log(JSON.parse(text)); // `Object {ll: 11, kw: "sw", wit: "jajar"}` 
+0

darum zu entwickeln. Dies würde fehlschlagen, wenn Daten Komma haben. Beispiel: '" ll: 11, kw: sw, witz: jajar, abs "' – Rajesh

+0

@Rajesh, wenn ja, wäre es ein komplexer und widersprüchlicher Fall. Denn solch ein Komma kann in der Mitte stehen wie '" ll: 11, kw: sw, jajar, wit: 222 "'. Wie könnten wir in einem solchen Fall wissen, ob es "kw": "sw, jajar", ..., "oder es war gemeint als" ..., "jajar, wit": 222' (Name der Eigenschaft mit Komma))? – RomanPerekhrest

+0

Problem ist OP liest aus Google Tabellenkalkulation, so dass Benutzer beliebige Daten eingeben können. Parsing String wäre eine schmerzhafte und wird viele Lücken haben. Der beste Weg wäre, zu überprüfen, ob Google Tabellen Daten in einem bestimmten Format bereitstellt, das wir konsumieren und sicher analysieren können. Ihre Lösung ist großartig, aber ich schätze OP sieht in die falsche Richtung. – Rajesh

1
var mz = "ll: 11, kw: sw, wit: jajar"; 
    var str = mz.replace(/:/g, '":"'); 
    str = str.replace(/,/g, '","'); 
    str = '"' + str + '"'; 
    var str = '"ll":"11","kw":"sw" ,"wit":"jajar"'; 
    var text = '{"contents":[' + '{' + str + '}]}'; 
    obj = JSON.parse(text); 
    alert(obj.contents[0].ll + " " + obj.contents[0].kw + " " + obj.contents[0].wit); 

Dies funktioniert gut. Versuche dies.