2016-10-29 3 views
-2

Meine Vermessungsausgabe ist wie {"a": "1", "b": "2", "c": "1", "d": "0", "e ":" Verbessere bitte "," Id ":" 789 "}, wenn es den Jsp erreicht, und ich würde gerne 0 zu Gut, 1 zu Schlecht und 2 zu OK ändern, was die Ausgaben von a, b, c sind, d .wie können wir das mit der foreach-Funktion machen?Java-Skript zum Umwandeln von JSON-Daten

+0

Dank, u kann mir ein Beispiel geben. – munch

+0

nein, es ist gut. Vielen Dank – munch

+0

verdammt ... Ich dachte, du arbeitest mit einem Array, wie Sie foreach erwähnt ... Entschuldigung für die Irreführung Sie –

Antwort

0

So ähnlich?

var input = {"a":"1","b":"2","c":"1","d":"0","e":"please improve","Id":"789"}; 

var mapvals = {"0":"good", "1":"bad", "2":"ok"}; 

var newObject = Object.keys(input).reduce(function(previous, current) { 
    previous[current] = mapvals[input[current]] || input[current]; 
    return previous; 
}, {}); 

console.log(newObject); 

Welche gibt:

{ 
    a: "bad", 
    b: "ok", 
    c: "bad", 
    d: "good", 
    e: "please improve", 
    Id: "789" 
} 

Sie es mit einer forEach Funktion manuell tun könnte, wenn man wirklich wollte ... aber ich werde das auf Sie verlassen.

+0

@munch, ich weiß nicht, was Sie meinen "meine Eingabe ist eine ganze Tabelle". '$ {jsondata}' ist kein gültiges Javascript ... also kann ich nicht mal raten, was Sie meinen (Datenbanktabelle? HTML-Tabelle? Javascript-Array von Arrays?). Kannst du mir ein Beispiel geben? –

0

foreach() und map() funktionieren nur auf Arrays, so dass sie nicht direkt auf Ihrem Objekt verwendet werden können. Sie müssen die Funktionen keys() oder entries() zuerst verwenden, um die Felder im Objekt als Array zu erhalten.

Leider funktioniert Object.entries() derzeit nur in Firefox (*). Wie dem auch sei, keys() erzeugt sowieso einfacheren Code.

var input = {"a":"1","b":"2","c":"1","d":"0","e":"please improve","Id":"789"}; 
 

 
var mapvals = {"0":"good", "1":"bad", "2":"ok"}; 
 

 
var output = {}; 
 
Object.keys(input).forEach(function(key) { 
 
    output[key] = mapvals[input[key]] || input[key]; 
 
}); 
 

 
console.log(output);

(*) Es ist auch in Chrome zur Verfügung, aber nur hinter einer Konfiguration Flagge.

+1

@NickGrealy Ich hoffe, es macht dir nichts aus ... Ich habe dein Framework geliehen, um zu zeigen, dass es etwas einfacher als dein Beispiel gemacht werden kann. –

+0

es ist ein JSON-Array: {"a": "0", "b": "2", "c": "0", "d": "0", "e": "", "id" : "456"}, {a: 0, b: 0, c: 0, d: 0, e: test, id : "123"}, {"a": "0", "b": "2", "c": "0", "d": "0", "e": "bitte testen", "id ":" 456 "}, {a: 0, b: 2, c: 0, d: 0, e:", id : "456"}, {a: 0, b: 1, c: 1, d: 0, e: ID, 456}, {a: 2, b: 2, c: 2, d: 2, e:, id: 789 "}, {a": 1 "," b ":" 1 "," c ":" 1 "," d ":" 1 "," e ":" Umfrage "," id ": 789 "}, {a": "1", "b": "1", "c": "2", "d": "2", "e": "1234567", "id": 789 "}, {" a ":" 0 "," b ":" 0 "," c ":" 0 "," d ":" 0 "," e ":" "," id ":" 234 "}, – munch

+0

Entschuldigung, es funktioniert nicht für meine Daten. – munch

0

können Sie die Werte beim Serialisieren des Objekts konvertieren. Bevor Sie die Json an das Backend senden:

var data = {"a":"1","b":"2","c":"1","d":"0","e":"please improve","Id":"789"}; 
var mapvals = {"0":"good", "1":"bad", "2":"ok"}; 
var json = JSON.stringify(data, (key, value) => key && value in mapvals? mapvals[value]: value); 

json:

{"a":"bad","b":"ok","c":"bad","d":"good","e":"please improve","Id":"789"} 

können Sie auch weitere hinzufügen „Filter“, um nur einige Tasten, um diese Logik anwenden

auch mit komplexeren Arbeiten Daten, wie das Array von solchen Artikeln, die du erwähnt hast.

var data = [ 
    {"a":"0","b":"2","c":"0","d":"0","e":" ","id":"456"}, 
    {"a":"0","b":"0","c":"0","d":"0","e":"test","i‌​d":"123"},{"a":"0","‌​b":"2","c":"0","d":"‌​0","e":"please test ","id":"456"}, 
    {"a":"0","b":"2","c":"0","d":"0","e":" ","id":"456"}, 
    {"a":"0","b":"1","c":"1","d":"0","e":" ","id":"456"}, 
    {"a":"2","b":"2","c":"2","d":"2","e":" ","id":"789"}, 
    {"a":"1","b":"1","c":"1","d":"1","e":"survey ","id":"789"}, 
    {"a":"1","b":"1","c":"2","d":"2","e":"1234567"‌​,"id":"789"}, 
    {"a":"0‌​","b":"0","c":"0","d‌​":"0","e":" ","id":"234"} 
]; 
var mapvals = {"0":"good", "1":"bad", "2":"ok"}; 
var json = JSON.stringify(data, (key, value) => key && value in mapvals? mapvals[value]: value); 

json:

[{"a":"good","b":"ok","c":"good","d":"good","e":" ","id":"456"},{"a":"good","b":"good","c":"good","d":"good","e":"test","id":"123"},{"a":"good","b":"ok","c":"good","d":"good","e":"please test ","id":"456"},{"a":"good","b":"ok","c":"good","d":"good","e":" ","id":"456"},{"a":"good","b":"bad","c":"bad","d":"good","e":" ","id":"456"},{"a":"ok","b":"ok","c":"ok","d":"ok","e":" ","id":"789"},{"a":"bad","b":"bad","c":"bad","d":"bad","e":"survey ","id":"789"},{"a":"bad","b":"bad","c":"ok","d":"ok","e":"1234567","id":"789"},{"a":"good","b":"good","c":"good","d":"good","e":" ","id":"234"}] 
+0

ITS kein Objekt, es ist ein Array – munch

+0

'JSON.stringify()' funktioniert auch mit Arrays. Ich habe die Antwort erweitert. – Thomas

+0

Awsome es funktioniert .thanks viele alle – munch

Verwandte Themen