Leerzeichen zwischen der JSON.stringify-Ausgabe

Lesezeit: 3 Minuten

Ich verwende Jquery, um alle Produktnamen von der Seite abzurufen, und lege sie dann in ein Array. Ich verwende diesen Code

 <script type="text/javascript">
 jQuery(document).ready(function($) {
    var products = $(".product-name").map(function() {
    return { name: $(this).text() }
 }) .get();
 console.log(JSON.stringify(products));
 });
 </script>

Dies gibt mir eine Ausgabe in diesem Format

[{“name”:”Sample Product Name”},{“name”:”Sample Product Name 2″}]

Was ich zu erreichen versuche, ist, zwischen diesen beiden Objekten nach “,” ein Leerzeichen zu haben, damit die Ausgabe ungefähr so ​​​​aussieht

[{“name”:”Sample Product Name”}, {“name”:”Sample Product Name 2″}]

Irgendwelche Ratschläge? Ich kämpfe stundenlang und ohne Erfolg.

Hier ist die jsfiddle
http://jsfiddle.net/2MeMY/1/

  • Warum willst du die Ausgabe so? JSON wurde nicht dafür entwickelt, dass Menschen die ganze Zeit lesen können, daher scheint es eine große Zeitverschwendung zu sein, Stunden mit Abständen zu verbringen.

    – Erik Philips

    18. Juli 2014 um 22:48 Uhr

  • @ErikPhilips, weil das System, auf dem ich die Ausgabe geben muss, so strukturiert ist, dass es die Eingabe wie folgt benötigt: ( [{“name”:”Sample Product Name”}, {“name”:”Sample Product Name 2″}]

    – Benutzer3550203

    18. Juli 2014 um 22:54 Uhr

  • Es ist also ein nicht standardbasiertes System, tut mir leid, das kann keinen Spaß machen.

    – Erik Philips

    18. Juli 2014 um 22:55 Uhr


  • @ErikPhilips Ich hatte das gleiche Problem bei der Arbeit mit APIGEE, vertrau mir, es macht überhaupt keinen Spaß!

    – Arielle

    19. August 2016 um 13:32 Uhr

Das ist vielleicht nicht das, was Sie wollen, aber wenn Sie nur wollen, dass es besser aussieht, würde ich empfehlen:

console.log(JSON.stringify(products, null, 2));

was dir geben würde

[
  {
    "name": "Sample Product Name"
  },
  {
    "name": "Sample Product Name 2"
  }
]

In der Konsole. Wenn Sie wirklich nur ein Leerzeichen vor Kommas wollen, könnten Sie Folgendes tun:

console.log(JSON.stringify(products).split('},{').join('}, {'));

http://jsfiddle.net/2MeMY/3/

Sie können dies auch mit Ersetzen tun

console.log(JSON.stringify(products).replace(/},{/g,'}, {')); 

// /},{/g means all occurance of },{

  • Während dieser Code die Frage beantworten kann, würde die Bereitstellung von zusätzlichem Kontext dazu, wie und/oder warum er das Problem löst, den langfristigen Wert der Antwort verbessern. Lesen Sie dies.

    – Shanteshwar Inde

    30. Januar 2019 um 7:12 Uhr

Benutzeravatar von Venryx
Venryx

Wenn Sie eine json-Ausgabe wünschen, ist dies:

  1. Einzelne Zeile
  2. Hat Leerzeichen zwischen Prop-Namen und Prop-Werten (und zwischen Elementen)
  3. Enthält Leerzeichen zwischen jedem Komma und dem nächsten Prop-Namen/Element

Sie können dies verwenden:

function Stringify_WithSpaces(obj) {
	let result = JSON.stringify(obj, null, 1); // stringify, with line-breaks and indents
	result = result.replace(/^ +/gm, " "); // remove all but the first space for each line
	result = result.replace(/\n/g, ""); // remove line-breaks
	result = result.replace(/{ /g, "{").replace(/ }/g, "}"); // remove spaces between object-braces and first/last props
	result = result.replace(/\[ /g, "[").replace(/ \]/g, "]"); // remove spaces between array-brackets and first/last items
	return result;
}

let obj = [{name: "Sample Product Name"}, {name: "Sample Product Name 2"}];
console.log("Stringified with spaces: " + Stringify_WithSpaces(obj));

Und hier ist die Funktion als einzeiliger Ausdruck:

JSON.stringify(obj, null, 1).replace(/^ +/gm, " ").replace(/\n/g, "").replace(/{ /g, "{").replace(/ }/g, "}").replace(/\[ /g, "[").replace(/ \]/g, "]")

Erweiterte Typescript-Version


Hier ist eine ausführlichere Version (in Typescript) mit Optionen:

export class ToJSON_WithSpaces_Options {
    insideObjectBraces = false;
    insideArrayBrackets = false;
    betweenPropsOrItems = true;
    betweenPropNameAndValue = true;
}
export function ToJSON_WithSpaces(obj, options?: Partial<ToJSON_WithSpaces_Options>) {
    options = Object.assign({}, new ToJSON_WithSpaces_Options(), options);

    let result = JSON.stringify(obj, null, 1); // stringify, with line-breaks and indents
    result = result.replace(/^ +/gm, " "); // remove all but the first space for each line
    result = result.replace(/\n/g, ""); // remove line-breaks
    if (!options.insideObjectBraces) result = result.replace(/{ /g, "{").replace(/ }/g, "}");
    if (!options.insideArrayBrackets) result = result.replace(/\[ /g, "[").replace(/ \]/g, "]");
    if (!options.betweenPropsOrItems) result = result.replace(/, /g, ",");
    if (!options.betweenPropNameAndValue) result = result.replace(/": /g, `":`);
    return result;
}

Idealerweise wendet diese Art von Funktion die regulären Ausdrücke an frühere zum Entfernen der Zeilenumbrüche (damit sichergestellt werden kann, dass kein Text in vom Benutzer bereitgestellten Zeichenfolgen geändert wird), aber ich überlasse dies jemand anderem, da das oben Genannte für meinen Anwendungsfall ausreicht (und ich denke, die meisten anderen ).

1438190cookie-checkLeerzeichen zwischen der JSON.stringify-Ausgabe

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy