Reputation: 1724
I want to change my data into desired JSON format. My data looks like this:
[
"{
id:001,
name:akhilesh,
}",
"{
id:002,
name:Ram,
}"
]
I want to convert the above data to valid JSON:
[
{
"id":"001",
"name":"akhilesh"
},
{
"id":"002",
"name":"Ram"
}
]
I tried the following, but none of these helped:
JSON.serialize
JSON.parse
eval
I need help for this.
The exact data response from server side is:
{
"d": [
"{id:413,title:ranjan,start:413,end:413}",
"{id:414,title:raja,start:414,end:414}",
"{id:415,title:raja g,start:415,end:415}",
"{id:416,title:abhh,start:416,end:416}",
"{id:417,title:chta,start:417,end:417}",
"{id:418,title:Raju,start:418,end:418}",
"{id:419,title:Ranjan,start:419,end:419}",
"{id:420,title:Raja,start:420,end:420}",
"{id:421,title:chitti,start:421,end:421}",
"{id:422,title:Raja,start:422,end:422}",
"{id:423,title:raja,start:423,end:423}",
"{id:424,title:yash,start:424,end:424}",
"{id:425,title:vsg,start:425,end:425}",
"{id:431,title:Vimal11,start:431,end:431}",
"{id:432,title:Aruhi,start:432,end:432}",
"{id:434,title:Aruhi,start:434,end:434}",
"{id:435,title:,start:435,end:435}",
"{id:436,title:xs,start:436,end:436}",
"{id:437,title:rajkj,start:437,end:437}",
"{id:438,title:mmt,start:438,end:438}",
"{id:439,title:xaxa,start:439,end:439}",
"{id:440,title:yash,start:440,end:440}"
]
}
Server Side Code
[System.Web.Services.WebMethod]
public static List<string> getData()
{
List<string> data = new List<string>();
using (SqlConnection con = new SqlConnection("Data Source=ACME-PC\\SQL;Integrated Security=true;Initial Catalog=ClinicApplication"))
{
SqlCommand cmd = new SqlCommand("select DISTINCT Patient_ID,First_Name,fromtime,totime,Date from tbl_AddPatientInfo", con);
{
con.Open();
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
string id = "{" +
"\"id:\"" + dr["Patient_ID"].ToString() + "," +
"title:" + dr["First_Name"].ToString() + "," +
"start:" + dr["Patient_ID"].ToString() + "," +
"end:" + dr["Patient_ID"].ToString() +
"}";
string ids = id.Replace(@"""", "");
data.Add(ids);
}
return data;
}
}
}
Upvotes: 3
Views: 5873
Reputation: 87233
If you've control on how the response is sent from the server, I'd recommend to use json_encode(response);
if using PHP or JSON.stringify(response)
if using Javascript(node.js) or similar method for other languages. And then on client-side, you can use JSON.parse(response)
directly on the response to get JSON object.
The elements of array need to be wrapped in quotes, so that it can be converted to JSON using JSON.parse
. Then map
can be used with JSON.parse.
var arr = [
'{"id":"001","name":"akhilesh"}',
'{"id":"002","name":"Ram"}'
];
arr = arr.map(JSON.parse);
console.log(arr);
document.getElementById('result').innerHTML = JSON.stringify(arr, 0, 4);
<pre id="result"></pre>
If you don't have quotes in the string, you can use regex to add them and make it suitable to pass to JSON.parse
.
var arr = [
"{id:001,name:akhilesh}",
"{id:002,name:Ram}"
];
arr = arr.map(function(e) {
// Add quotes on every alphanumeric character
return JSON.parse(e.replace(/(\w+)/g, '"$1"'));
});
console.log(arr);
document.getElementById('result').innerHTML = JSON.stringify(arr, 0, 4);
<pre id="result"></pre>
Upvotes: 13
Reputation: 272446
Fixing JSON via JavaScript is wrong. Using string functions to generate JSON on server side is equally rubbish. Your code will break for example when the data contains "
, new lines and what not.
I would rather use some library that generates JSON. Here is a complete example that uses JavaScriptSerializer
. It can convert various objects. Here we use a List
of Dictionary
objects:
using System;
using System.Collections.Generic;
using System.Web;
using System.Web.Services;
using System.Web.Script.Services;
using System.Web.Script.Serialization;
[WebService]
[ScriptService]
public class WebService1 : System.Web.Services.WebService
{
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public string getData()
{
List<Dictionary<string, object>> data = new List<Dictionary<string, object>>();
using (SqlConnection con = new SqlConnection("Data Source=ACME-PC\\SQL;Integrated Security=true;Initial Catalog=ClinicApplication"))
{
SqlCommand cmd = new SqlCommand("select DISTINCT Patient_ID,First_Name,fromtime,totime,Date from tbl_AddPatientInfo", con);
{
con.Open();
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
Dictionary<string, object> item = new Dictionary<string, object>();
item.Add("id", dr["Patient_ID"]);
item.Add("title", dr["First_Name"]);
item.Add("start", dr["Patient_ID"]);
item.Add("end", dr["Patient_ID"]);
data.Add(item);
}
}
}
return new JavaScriptSerializer().Serialize(data);
}
}
Testing with jQuery:
jQuery.ajax({
url: "/testing/WebService1.asmx/getData",
method: "POST",
contentType: "application/json",
dataType: "json",
success: function (json) {
var data = jQuery.parseJSON(json.d);
console.log(data);
}
});
Console Log:
[{
"id": 413,
"title": "ranjan",
"start": 413,
"end": 413
}, {
"id": 414,
"title": "raja",
"start": 414,
"end": 414
}]
Upvotes: 4
Reputation: 3854
Instead of doing a complex regex
(which is might not work in some conditions) by using javascript
. Its better to do server side changes to get JSON
data correctly.
Avoid building the JSON by string concatenation, since you risk sending broken data when the string contains certain special characters in JSON. This should be done with JSON serializer.
[System.Web.Services.WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public static string getData(){
List<Dictionary<string, string>> data = new List<Dictionary<string, string>>();
Dictionary<string, string> item;
using (SqlConnection con = new SqlConnection("Data Source=ACME-PC\\SQL;Integrated Security=true;Initial Catalog=ClinicApplication"))
{
SqlCommand cmd = new SqlCommand("select DISTINCT Patient_ID,First_Name,fromtime,totime,Date from tbl_AddPatientInfo", con);
{
con.Open();
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
item = new Dictionary<string, string>();
item.Add("id", dr["Patient_ID"]+"");
item.Add("title", dr["First_Name"]+"");
item.Add("start", dr["Patient_ID"]+"");
item.Add("end", dr["Patient_ID"]+"");
data.Add(item);
}
return new JavaScriptSerializer().Serialize(data);
}
}
}
modification to your existing code:
[System.Web.Services.WebMethod]
public static List<string> getData(){
List<string> data = new List<string>();
using (SqlConnection con = new SqlConnection("Data Source=ACME-PC\\SQL;Integrated Security=true;Initial Catalog=ClinicApplication"))
{
SqlCommand cmd = new SqlCommand("select DISTINCT Patient_ID,First_Name,fromtime,totime,Date from tbl_AddPatientInfo", con);
{
con.Open();
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
string id = "{" +
"\"id\":" + "\""+dr["Patient_ID"].ToString()+"\"" + "," +
"\"title\":" + "\""+dr["First_Name"].ToString()"\"" + "," +
"\"start\":" + "\""+dr["Patient_ID"].ToString()"\"" + "," +
"\"end\":" + "\""+dr["Patient_ID"].ToString() + "\""+
"}";
data.Add(id);
}
return data;
}
}
}
Upvotes: 5