简体   繁体   English

json文件中的换行问题

[英]issue with line breaks in json file

I export data out of a system and get this block of content, how do i remove the line breaks so it is all one line. 我从系统中导出数据并获取此内容块,我如何删除换行符,所以全都是一行。

I have tried various things such as " jsonData.replace(/[\\r\\n]+/g, '\\n\\n'); ", but nothing seems to work. 我已经尝试了诸如“ jsonData.replace(/[\\r\\n]+/g, '\\n\\n'); “之类的各种方法,但是似乎没有任何效果。

{"pageUrl":"/about","name":"About Us","content":"\n    \n        \n        
\n    
About
\n        
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod 
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, 
quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo 
consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse 
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non 
proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
\n        
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod 
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, 
quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo 
consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse 
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non 
proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
\n    \n"}

this is the code in whole, the above is just one item in the json file 这是整个代码,上面只是json文件中的一项

function list_pages(){
    var access_token = BCAPI.Helper.Site.getAccessToken();
    var request = $.ajax({
        url: "/webresources/api/v3/sites/current/pages?fields=pageUrl,name,content",
        type: "GET",
        connection: "keep-alive",
        contentType: "application/json",
        headers: {
            "Authorization": $.cookie('access_token')
        }
    });
    request.done(function (msg) {
        var myJSONString = JSON.stringify(msg.items);
        **var myEscapedJSONString = myJSONString.replace(/[\r\n]/g, '');**
        $( "#results" ).append( myEscapedJSONString );
    })
    request.fail(function (jqXHR) {
        console.log("Request failed.");
        console.log("Error code: " + jqXHR.status);
        console.log("Error text: " + jqXHR.statusText);
        console.log("Response text: " + jqXHR.responseText);
    })
   }

Updated Answer : 更新的答案

Your edit to the question completely changes it. 您对问题的编辑将完全更改它。 You're doing a replace on the result of JSON.stringify , which will never produce the JSON you have in the question (with actual carriage return and/or newline characters in the string). 您正在对JSON.stringify的结果进行replace ,该结果将永远不会生成您在问题中具有的JSON(字符串中包含实际的回车符和/或换行符)。

In a comment, you've said your goal is to see the formatted JSON data. 在一条评论中,您说过您的目标是查看格式化的JSON数据。 To do that: 要做到这一点:

  • Tell JSON.stringify to format it by adding null, n to the call, where n is how much you want things indented. 告诉JSON.stringify通过在调用中添加null, n来格式化它,其中n是您希望事物缩进多少。 So for instance: JSON.stringify(msg.items, null, 4) . 例如: JSON.stringify(msg.items, null, 4)
  • Replace & with &amp; &amp;替换& and < with &lt; <&lt; (in that order). (以该顺序)。
  • Output to an element with one of the pre settings for its white-space CSS setting (a pre element, for instance, but you can do it with CSS as well) 输出到具有其white-space CSS设置的pre设置之一的元素(例如,一个pre元素,但您也可以使用CSS进行设置)

So: 所以:

var htmlToDisplay = jsonData
    .replace(/&/g, "&amp;")
    .replace(/</g, "&lt;");

...and then put it in an element with white-space: pre . ...然后将其放在带有white-space: pre的元素中white-space: pre

Example: 例:

 var msg = { items: [ { pageUrl: "/about", name: "About Us", content: "\\n \\n \\n \\n About\\n Lorem ipsum dolor sit amet, consectetur adipisicing elit..." } ] }; var jsonData = JSON.stringify(msg.items, null, 4); var htmlToDisplay = jsonData .replace(/&/g, "&amp;") .replace(/</g, "&lt;"); $("#results").append(htmlToDisplay); 
 #results { white-space: pre; font-family: monospace; } 
 <div id="results"></div> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> 

There are other settings for white-space you might try, like pre-wrap : 您还可以尝试其他用于white-space设置,例如pre-wrap

 var msg = { items: [ { pageUrl: "/about", name: "About Us", content: "\\n \\n \\n \\n About\\n Lorem ipsum dolor sit amet, consectetur adipisicing elit..." } ] }; var jsonData = JSON.stringify(msg.items, null, 4); var htmlToDisplay = jsonData .replace(/&/g, "&amp;") .replace(/</g, "&lt;"); $("#results").append(htmlToDisplay); 
 #results { white-space: pre-wrap; font-family: monospace; } 
 <div id="results"></div> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> 


Original Answer : 原始答案

You don't want to replace those invalid line breaks with line breaks; 您不想用换行符替换那些无效的换行符; you want to replace them with nothing: 您想用什么代替它们:

jsonData = jsonData.replace(/[\r\n]/g, '');

 let jsonData = document.getElementById("the-json").textContent; jsonData = jsonData.replace(/[\\r\\n]/g, ''); console.log(JSON.parse(jsonData)); 
 <script id="the-json" type="text/json">{"pageUrl":"/about","name":"About Us","content":"\\n \\n \\n \\n About \\n Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. \\n Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. \\n \\n"}</script> 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM