function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
Keith Stephens 18Keith Stephens 18 

Can't parse Json from API call

Hello All,
I am making a call from my c# rest service to try and get Salesforce latest version number, but SF is not retuning a parsable Json stirng.
HttpClient apiCallClient = new HttpClient();
            //String restCallURL = ServiceURL + "/services/data/v40.0/sobjects";                
            String restCallURL = ServiceURL + "/services/data/";
            
            HttpRequestMessage apirequest = new HttpRequestMessage(HttpMethod.Get, restCallURL);
            apirequest.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            apirequest.Headers.Add("authorization", "Bearer " + authToken);
            HttpResponseMessage apiCallResponse = await apiCallClient.SendAsync(apirequest);

            String requestresponse = await apiCallResponse.Content.ReadAsStringAsync();

           // String jsonResult = requestresponse.TrimStart(new char[] { '[' }).TrimEnd(new char[] { ']' });

            List<String> sObjLst = new List<String>();
            return requestresponse.ToString();
            
            if (apiCallResponse.IsSuccessStatusCode)
            {

                JObject sObjJObj = JObject.Parse(requestresponse);
                return sObjJObj.ToString();

            }
In the above code requestresponse equals, below but newtonsoft_Json is not able to parse it, and if I try and parse it with online parsers they also return errors.

[{\"label\":\"Winter '11\",\"url\":\"/services/data/v20.0\",\"version\":\"20.0\"},{\"label\":\"Spring '11\",\"url\":\"/services/data/v21.0\",\"version\":\"21.0\"},{\"label\":\"Summer '11\",\"url\":\"/services/data/v22.0\",\"version\":\"22.0\"},{\"label\":\"Winter '12\",\"url\":\"/services/data/v23.0\",\"version\":\"23.0\"},{\"label\":\"Spring '12\",\"url\":\"/services/data/v24.0\",\"version\":\"24.0\"},{\"label\":\"Summer '12\",\"url\":\"/services/data/v25.0\",\"version\":\"25.0\"},{\"label\":\"Winter '13\",\"url\":\"/services/data/v26.0\",\"version\":\"26.0\"},{\"label\":\"Spring '13\",\"url\":\"/services/data/v27.0\",\"version\":\"27.0\"},{\"label\":\"Summer '13\",\"url\":\"/services/data/v28.0\",\"version\":\"28.0\"},{\"label\":\"Winter '14\",\"url\":\"/services/data/v29.0\",\"version\":\"29.0\"},{\"label\":\"Spring '14\",\"url\":\"/services/data/v30.0\",\"version\":\"30.0\"},{\"label\":\"Summer '14\",\"url\":\"/services/data/v31.0\",\"version\":\"31.0\"},{\"label\":\"Winter '15\",\"url\":\"/services/data/v32.0\",\"version\":\"32.0\"},{\"label\":\"Spring '15\",\"url\":\"/services/data/v33.0\",\"version\":\"33.0\"},{\"label\":\"Summer '15\",\"url\":\"/services/data/v34.0\",\"version\":\"34.0\"},{\"label\":\"Winter '16\",\"url\":\"/services/data/v35.0\",\"version\":\"35.0\"},{\"label\":\"Spring '16\",\"url\":\"/services/data/v36.0\",\"version\":\"36.0\"},{\"label\":\"Summer '16\",\"url\":\"/services/data/v37.0\",\"version\":\"37.0\"},{\"label\":\"Winter '17\",\"url\":\"/services/data/v38.0\",\"version\":\"38.0\"},{\"label\":\"Spring '17\",\"url\":\"/services/data/v39.0\",\"version\":\"39.0\"},{\"label\":\"Summer '17\",\"url\":\"/services/data/v40.0\",\"version\":\"40.0\"},{\"label\":\"Winter '18\",\"url\":\"/services/data/v41.0\",\"version\":\"41.0\"}]

Thanks for any help or advice.
Keith.
Nayana KNayana K
Problem is with forward slash. You have to replace \ with blank value.
Your final json string should be :

[{"label":"Winter '11","url":"/services/data/v20.0","version":"20.0"},{"label":"Spring '11","url":"/services/data/v21.0","version":"21.0"},{"label":"Summer '11","url":"/services/data/v22.0","version":"22.0"},{"label":"Winter '12","url":"/services/data/v23.0","version":"23.0"},{"label":"Spring '12","url":"/services/data/v24.0","version":"24.0"},{"label":"Summer '12","url":"/services/data/v25.0","version":"25.0"},{"label":"Winter '13","url":"/services/data/v26.0","version":"26.0"},{"label":"Spring '13","url":"/services/data/v27.0","version":"27.0"},{"label":"Summer '13","url":"/services/data/v28.0","version":"28.0"},{"label":"Winter '14","url":"/services/data/v29.0","version":"29.0"},{"label":"Spring '14","url":"/services/data/v30.0","version":"30.0"},{"label":"Summer '14","url":"/services/data/v31.0","version":"31.0"},{"label":"Winter '15","url":"/services/data/v32.0","version":"32.0"},{"label":"Spring '15","url":"/services/data/v33.0","version":"33.0"},{"label":"Summer '15","url":"/services/data/v34.0","version":"34.0"},{"label":"Winter '16","url":"/services/data/v35.0","version":"35.0"},{"label":"Spring '16","url":"/services/data/v36.0","version":"36.0"},{"label":"Summer '16","url":"/services/data/v37.0","version":"37.0"},{"label":"Winter '17","url":"/services/data/v38.0","version":"38.0"},{"label":"Spring '17","url":"/services/data/v39.0","version":"39.0"},{"label":"Summer '17","url":"/services/data/v40.0","version":"40.0"},{"label":"Winter '18","url":"/services/data/v41.0","version":"41.0"}]

so that parser accepts.

I don't have any c# experience. 
In salesforce, String class has replaceAll() method.

You can do :
String s2 = s1.replaceAll('\', '');
pass this s2 into the parser method.

 
Keith Stephens 18Keith Stephens 18
Hello,
the string replace did not work.  Why is Salesforce not sending me proper Json anyway?
Here is some stubbed out code. It is breaking at the parse.
string requestresponse = await apiCallResponse.Content.ReadAsStringAsync();

            //requestresponse = Regex.Unescape(requestresponse);
            //requestresponse = Regex.Escape(requestresponse);
            requestresponse = requestresponse.Replace("\\", "");
             

            //Get total size and done values
            //parsing Json 
            //JToken token = JObject.Parse(requestresponse);
            JToken token = JArray.Parse(requestresponse);
            //return "Token= " + token.ToString();
            int ver = (int)token.SelectToken("version");
            return "my ver= " + ver.ToString();



[{\"label\":\"Winter '11\",\"url\":\"/services/data/v20.0\",\"version\":\"20.0\"},{\"label\":\"Spring '11\",\"url\":\"/services/data/v21.0\",\"version\":\"21.0\"},{\"label\":\"Summer '11\",\"url\":\"/services/data/v22.0\",\"version\":\"22.0\"},{\"label\":\"Winter '12\",\"url\":\"/services/data/v23.0\",\"version\":\"23.0\"},{\"label\":\"Spring '12\",\"url\":\"/services/data/v24.0\",\"version\":\"24.0\"},{\"label\":\"Summer '12\",\"url\":\"/services/data/v25.0\",\"version\":\"25.0\"},{\"label\":\"Winter '13\",\"url\":\"/services/data/v26.0\",\"version\":\"26.0\"},{\"label\":\"Spring '13\",\"url\":\"/services/data/v27.0\",\"version\":\"27.0\"},{\"label\":\"Summer '13\",\"url\":\"/services/data/v28.0\",\"version\":\"28.0\"},{\"label\":\"Winter '14\",\"url\":\"/services/data/v29.0\",\"version\":\"29.0\"},{\"label\":\"Spring '14\",\"url\":\"/services/data/v30.0\",\"version\":\"30.0\"},{\"label\":\"Summer '14\",\"url\":\"/services/data/v31.0\",\"version\":\"31.0\"},{\"label\":\"Winter '15\",\"url\":\"/services/data/v32.0\",\"version\":\"32.0\"},{\"label\":\"Spring '15\",\"url\":\"/services/data/v33.0\",\"version\":\"33.0\"},{\"label\":\"Summer '15\",\"url\":\"/services/data/v34.0\",\"version\":\"34.0\"},{\"label\":\"Winter '16\",\"url\":\"/services/data/v35.0\",\"version\":\"35.0\"},{\"label\":\"Spring '16\",\"url\":\"/services/data/v36.0\",\"version\":\"36.0\"},{\"label\":\"Summer '16\",\"url\":\"/services/data/v37.0\",\"version\":\"37.0\"},{\"label\":\"Winter '17\",\"url\":\"/services/data/v38.0\",\"version\":\"38.0\"},{\"label\":\"Spring '17\",\"url\":\"/services/data/v39.0\",\"version\":\"39.0\"},{\"label\":\"Summer '17\",\"url\":\"/services/data/v40.0\",\"version\":\"40.0\"},{\"label\":\"Winter '18\",\"url\":\"/services/data/v41.0\",\"version\":\"41.0\"}]"