-1

I am trying to escape newline chars in a JSON string and failing. The variable is newissuedetailsvalue.

 $(newissueshtml).filter('.newissue').each(function () {
            var newissuehtml = $(this).html();
            var issueguid = $(newissuehtml).find(".issueguid").val();
            var newissuetypevalue = $(newissuehtml).find('.newissuetypeinput').val();
            newissuesjsonstring += '{"newissuetype":"' + newissuetypevalue + '",';
            newissuesjsonstring += '"newissueguid":"' + issueguid + '",';
            var newissuedetailsvalue = $(newissuehtml).find('.newissuedetailsinput').val();
            newissuedetailsvalue = newissuedetailsvalue.replace(/"/g, '\'');
            newissuedetailsvalue = newissuedetailsvalue.replace(/\\/g, ' ');
            newissuedetailsvalue = newissuedetailsvalue.replace(/[\\n]/g, 'x')
                                                       .replace(/[\\r]/g, 'x')
                                                       .replace(/\t/g, 'x');
            newissuesjsonstring += '"newissuedetails":"' + newissuedetailsvalue + '",';
            var newissueid = $(newissuehtml).find(".newissueid").val();
            newissuesjsonstring += '"newissueid":"' + newissueid + '",';
            var selectedresolutiondetail = $(newissuehtml).find(".resdetails").val();
            newissuesjsonstring += '"selectedresolutiondetail":"' + selectedresolutiondetail + '",';
            var resdetailslong = $(newissuehtml).find(".resdetlong").val();
            newissuesjsonstring += '"resolutiondetailslong":"' + resdetailslong + '",';
            var rescost = $(newissuehtml).find(".rescost").val();
            newissuesjsonstring += '"resolutioncost":"' + rescost + '",';
            var newissuesourceinput = $(newissuehtml).find(".newissuesourceinput").val();
            newissuesjsonstring += '"newissuesource":"' + newissuesourceinput + '",';
            var resolutiondate = $(newissuehtml).find(".resdate").val();
            newissuesjsonstring +=  '"resolutiondate":"' + resolutiondate + '"},';
        });
        newissuesjsonstring = newissuesjsonstring.slice(0, -1);
        newissuesjsonstring += ']';
AstroCB
  • 12,337
  • 20
  • 57
  • 73
nerdperson
  • 287
  • 1
  • 8
  • 19
  • 1
    use JSON.stringify() instead – twinlakes Jul 08 '14 at 00:40
  • JSON.stringify fails as well. It fails when I use JSON.parse – nerdperson Jul 08 '14 at 00:41
  • When in debugging mode, what, exactly what errors are you seeing? Was all the newIssueDetailsValue replace stuff a result of your previous debugging work? Do check out `http://stackoverflow.com/questions/4253367/how-to-escape-a-json-string-containing-newline-characters-using-javascript?#answer-4253415` – zipzit Jul 08 '14 at 00:59

1 Answers1

3

Why are you building a JSON string by hand? Why not use JSON.stringify and have the library handle escaping for you?

newissuesjsonstring = JSON.stringify({
    newissuetype: $(newissuehtml).find('.newissuetypeinput').val(),
    newissueguid: $(newissuehtml).find(".issueguid").val(),
    newissuedetails: $(newissuehtml).find('.newissuedetailsinput').val(), //no need for manual escaping!
    /*...*/
});
hugomg
  • 68,213
  • 24
  • 160
  • 246
  • I did this - it does escape the new line and the value goes into the db. When I open the page again, I throw an error on $.each(JSON.parse(hiddenissuesjson), function (i, item) { in json.3 – nerdperson Jul 08 '14 at 01:38