0

How do I remove escape characters and the first and last quotation mark from a json string like this one:

"{\"SagsNr\":5,\"Titel\":\"Nr. Boulevard 76, st. tv. 8900 Randers C\",\"EjendomBeskrivelse\":\"Boulevardgården i Randers er nyrenoveret med 90 lejemål fordelt på Nr. Boulevard, Mariagervej og Ny vinkelvej \u000d\u000a \u000d\u000aIndenfor en radius af 1-2 km ligger både Randers City med flere hundrede specialforretninger, Regionshospitalet Randers, offentlige transportmuligheder, skoler, idrætsanlæg og stadion\u000d\u000a \u000d\u000aEjendommen har lukket, grønt gårdmiljø med bl.a. legeplads. Der er vaskeri i ejendommen\u000d\u000a \u000d\u000aAlle lejligheder råder over eget kælderrum\u000d\u000a \u000d\u000aBoulevardgården har nyrenoveret tag (2010)\u000d\u000a \u000d\u000aHusdyr ikke tilladt\u000d\u000a\",\"Areal\":54.00,\"Leje\":3711.00,\"LejemaalBeskrivelse\":\"Mindre lejlighed på 54 kvm i Boulevardgården\u000d\u000aLejligheden har to værelser og er beliggende i stueplan\u000d\u000aDer hører kælderrum til lejligheden\u000d\u000aLejligheden hører til ejendom med lukket, grønt gårdmiljø med bl.a. legeplads. Der er moderne betalingsvaskeri i ejendommen.\u000d\u000a\u000d\u000a\",\"Adresse1\":\"Nr. Boulevard 76, st. tv.\",\"Rum\":2,\"Etage\":0,\"PostNr\":\"8900\",\"ByNavn\":\"Randers C\",\"AntalBilleder\":11,\"AntalProspekter\":0,\"AntalKort\":1"

I am using this method here to jsonify an datatable that contains data from an sql database:

        private string GetJson(DataTable dt)
    {
        System.Web.Script.Serialization.JavaScriptSerializer Jserializer = new System.Web.Script.Serialization.JavaScriptSerializer();
        List<Dictionary<string, object>> rowsList = new List<Dictionary<string, object>>();
        Dictionary<string, object> row = null;

        foreach (DataRow dr in dt.Rows)
        {
            row = new Dictionary<string, object>();
            foreach (DataColumn col in dt.Columns)
            {
                row.Add(col.ColumnName, dr[col]);
            }

            rowsList.Add(row);
        }
        return Jserializer.Serialize(rowsList);
    }

If I just remove the last character via f.eks:

json = json.Substring(0, json.Length - 2);

It ignores the quotation mark. I've also tried several kinds of replace to get rid of the escape characters but nothing seems to work OR it also removes quotation marks in the rest of the string, which I don't want(just the very first and very last).

I am completely lost here and would appreciate any kind of help.

Edit: When I run this:

                return json.Replace("\r\n", "")
      .Replace("\r", "")
      .Replace("\n", "")
      .Replace("\\", "")
      .Replace("\"", "");

I get this:

"{SagsNr:5,Titel:Nr. Boulevard 76, st. tv. 8900 Randers C,EjendomBeskrivelse:Boulevardgården i Randers er nyrenoveret med 90 lejemål fordelt på Nr. Boulevard, Mariagervej og Ny vinkelvej rn rnIndenfor en radius af 1-2 km ligger både Randers City med flere hundrede specialforretninger, Regionshospitalet Randers, offentlige transportmuligheder, skoler, idrætsanlæg og stadionrn rnEjendommen har lukket, grønt gårdmiljø med bl.a. legeplads. Der er vaskeri i ejendommenrn rnAlle lejligheder råder over eget kælderrumrn rnBoulevardgården har nyrenoveret tag (2010)rn rnHusdyr ikke tilladtrn,Areal:54.00,Leje:3711.00,LejemaalBeskrivelse:Mindre lejlighed på 54 kvm i BoulevardgårdenrnLejligheden har to værelser og er beliggende i stueplanrnDer hører kælderrum til lejlighedenrnLejligheden hører til ejendom med lukket, grønt gårdmiljø med bl.a. legeplads. Der er moderne betalingsvaskeri i ejendommen.rnrn,Adresse1:Nr. Boulevard 76, st. tv.,Rum:2,Etage:0,PostNr:8900,ByNavn:Randers C,AntalBilleder:11,AntalProspekter:0,AntalKort:1}"

Which is kinda close to what I want, but I still need the quotation marks around the values and I still need to quoation marks at the start and end removed.

Edit3: Without replacing characters: https://i.stack.imgur.com/do2sw.png After replacing characters: https://i.stack.imgur.com/4sl5b.png

Der Kejser
  • 63
  • 10
  • 1
    You may want to take a look a this : https://stackoverflow.com/a/15275495/4593642 – Amine Messaoudi Jun 18 '18 at 14:53
  • 2
    It is a double serialized json. So deserialize twice – Eser Jun 18 '18 at 14:55
  • 1
    Can I as where, exactly, you are viewing the JSON. I suspect that it's being escaped by the whatever you're using to view it and it is actually correctly formatted. – phuzi Jun 18 '18 at 15:09
  • Here is how it looks in my browser after replacing characters: https://i.imgur.com/gjthbiM.png and without replacing characters: https://i.imgur.com/xtzd0jt.png – Der Kejser Jun 18 '18 at 15:12
  • 1
    @DerKejser that first JSON snippet is not valid. Object keys in JSON must be in double quotes. –  Jun 18 '18 at 15:24

1 Answers1

0

I've figured it out.

I did indeed need to do some small changes to my JSON like Amy said. Then I switched the return type of the method from string to Stream and ran the JSON through this:

WebOperationContext.Current.OutgoingResponse.ContentType = "application/json; charset=utf-8";
            return new MemoryStream(Encoding.UTF8.GetBytes(json));

Now the output is finally without escape characters and the first/last quotation marks are gone too, probably because it's no longer a string. Found it here: WCF web service returning json format data

Der Kejser
  • 63
  • 10