2015-10-20 4 views
3

Я хочу изменить мои данные в нужные JSON формат. Мои данные выглядит следующим образом:Изменить формат данных в JSON

[ 
    "{ 
    id:001, 
    name:akhilesh, 
    }", 
    "{ 
    id:002, 
    name:Ram, 
    }" 
] 

Я хочу, чтобы преобразовать вышеуказанные данные актуальному JSON:

[ 
    { 
    "id":"001", 
    "name":"akhilesh" 
    }, 
    { 
    "id":"002", 
    "name":"Ram" 
    } 
] 

Я попытался следующие, но ни один из них помогло:

  1. JSON.serialize
  2. JSON.parse
  3. eval

Мне нужна помощь для этого.

Точный ответ данных со стороны сервера является:

{ 
    "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}" 
    ] 
} 

стороне сервера Код

[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; 
     } 
    } 
} 
+8

почему вы не можете вернуть правильную JSON с самого сервера? –

+0

Потому что я использовал список, чтобы вернуть это. В списке сами данные сами поступают динамически. –

+6

Существует только один правильный способ решения проблем с неправильными форматами данных - прекратить их использование. Это похоже на то, что «мой веб-сервер возвращает текст на французском языке и со многими опечатками, я хочу, чтобы он отображался на должном английском языке». –

ответ

5

Вместо того, чтобы делать сложный regex (который не может работать в некоторых условиях) с помощью javascript. Лучше сделать изменения на стороне сервера, чтобы правильно получить данные JSON.

Избегайте создания JSON путем конкатенации строк, поскольку вы рискуете отправить сломанные данные, когда строка содержит определенные специальные символы в JSON. Это должно быть сделано с помощью JSON-сериализатора.

[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); 
     } 
    } 
} 

изменения в существующий код:

[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; 
     } 
    } 
} 
+0

только что сделал небольшую замену снова –

+0

вы получаете правильный ответ сейчас. Если нет, напишите обновленный вывод, я поправлю вас дальше –

+0

да сэр меня меняет код пожалуйста, подождите –

14

Если вы управления о том, как ответ отправляется с сервера, я бы рекомендуем использовать json_encode(response); при использовании PHP или JSON.stringify(response) при использовании Javascript (node.js) или аналогичного метода для других языков. И затем на стороне клиента вы можете использовать JSON.parse(response) непосредственно на ответ, чтобы получить объект JSON.

Элементы массива необходимо обернуть в кавычки, чтобы его можно было преобразовать в JSON с помощью JSON.parse. Затем можно использовать map с 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>


Если вы не имеете кавычки в строке, вы можете использовать регулярные выражения, чтобы добавить их и сделать его пригодным для передачи JSON.parse.

Demo

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>

+2

Вы ясно его читали? у него нет двойных кавычек раньше и требуется двойные кавычки в после. –

+0

Мои данные идут динамически, он должен работать для этого ?? –

+1

@SusheelSingh Это не ** действительная строка **, которая отформатирована при добавлении в вопрос, не будет пробелов, когда ответ отправляется с сервера – Tushar

4

Закрепление JSON с помощью JavaScript это неправильно. Использование строковых функций для генерации JSON на стороне сервера также равнозначно. Например, ваш код сломается, когда данные содержат ", новые строки и что нет.

Я предпочел бы использовать некоторую библиотеку, которая генерирует JSON. Вот полный пример, который использует JavaScriptSerializer. Он может конвертировать различные объекты. Здесь мы используем List из Dictionary объектов:

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); 
    } 
} 

Тестирование с 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 
}] 
+0

Сэр вы назначаете значение статически, но мои данные поступают из базы данных, а затем добавляются в список. Как это можно сделать? –

+2

Это просто для иллюстрации. См. Пересмотренный ответ Сушила, который заимствовал код из моего примера, чтобы создать полный пример с использованием устройства чтения данных. –

Смежные вопросы