2016-09-17 2 views
1

C#을 사용하여 SQL Server 데이터베이스에서 데이터를 가져 오려고합니다. 문자열 작성기에서 json 문자열을 얻으려고합니다. 나는이 같은 시도 :문자열 작성기를 json 문자열로 변환

public string GetData() 
{ 
    using (SqlConnection con = new SqlConnection(this.Connection)) 
    { 
     con.Open(); 

     SqlCommand command = new SqlCommand("Select TITLE, DURATION, STATUS, TYPE from PROJECTS ", con); 

     StringBuilder sb = new StringBuilder(); 
     sb.Append("{"); 

     using (SqlDataReader reader = command.ExecuteReader()) 
     { 
      while (reader.Read()) 
      { 
       var k = reader.GetString(3); 

       if (k == "M") 
       { 
        sb.Append("main"); 
        sb.Append("{"); 
        sb.Append("sub:[]"); 
        sb.Append("Tittle:"); 
        sb.AppendFormat("{0}", reader["TITTLE"]); 
       } 

       if (k == "S") 
       { 
        sb.Append("sub"); 
        sb.Append("{"); 
        sb.Append("task:[]"); 
        sb.Append("Tittle:"); 
        sb.AppendFormat("{0}", reader["TITTLE"]); 
       } 

       if (k == "T") 
       { 
        sb.Append("task"); 
        sb.Append("{"); 
        sb.Append("Tittle:"); 
        sb.AppendFormat("{0}", reader["TITTLE"]); 
       } 
      }; 
     } 

     sb.Append("}"); 
     sb.AppendLine(); 

     return sb.ToString(); 
    } 
} 

지금은 같은 문자열을 얻을

sb = {{main{sub:[]Tittle:newsub{task:[]Tittle:new1task{Tittle:new2} 

하지만 내 필요한 문자열은 같은 것입니다 :

[{"main":{"sub":[{"task":[{"tittle":"new2""}],"tittle":"new1","}],"tittle":"new","}}] 

의미 : 내 메인 타이틀이 새로운 및 서브 획의 기능 1 작업 제목 new2. 내 필요한 json 문자열을 얻으려면 코드를 변경해야합니까?

+0

sb.Append (""main "" ");에서이 구문을 사용하십시오. –

+0

왜 json 결과를 문자열로 작성하고 있습니까? –

+0

나는 루프를 사용하여 내 페이지 테이블에서 업데이트하고 싶습니다. json 형식의 출력이 필요합니다. –

답변

0

이 코드에 몇 가지 문제가 있습니다

가 유효한 JSON 문자열이 될 당신이 모든 속성 이름이 sb.Append("\"main\"");

같은 뭔가를해야하므로, 따옴표 "에 동봉되는 속성 이름이있다 콜론 : 다음에, 그래서 당신은 당신 자체가 배열을 포함하는 중첩 된 구조, 객체를 포함한 배열 다루고있는 sb.Append("\"main\": ");

처럼 뭔가를해야 할 ... 당신은 닫기 괄호를 추가 할 수 있습니다모든 항목이 추가 된 후 배열의. 그래서 그렇게 할 수 있으려면

sb.Append("\"sub\": ["); 
//here you add the subitems in a loop 
sb.Append("]"); 

그런 짓을, (당신은 당신이 순간에 열려있는 어떤 구조를 추적해야합니다 그리고 당신은 정확한 필요한 순서대로 행을 반환하는 쿼리를해야합니다 즉, 먼저 기본 제목, 그 다음 첫 번째 포함 된 하위 항목, 그 다음 하위 항목, 두 번째 하위 항목, 그 다음 작업 ...)

상위 수준 대괄호를 닫지 마십시오. {. 여기서는 배열과 동일하게 적용됩니다. 개체를 추가하는 경우 해당 콘텐츠를 모두 추가 한 다음 닫는 } 중괄호를 추가해야합니다.

일반적으로 JSON을 직접 만들지 말고 JSON.net과 같은 프레임 워크를 사용하는 것이 좋습니다. 필요에 따라 콜렉션을 빌드 한 다음 올바른 json 문자열을 생성하는 프레임 워크 직렬화 메소드를 호출 할 수 있습니다.

+0

탱크 .......... –

+0

이상 의심됩니다. 칼럼 값에 대해 쿼트 ("")를 원합니다. sb.AppendFormat ("{0}", 리더 [ "TITTLE"]); 여기에 나는 새로운 가치를 얻는다. new 대신에 "new"가 필요합니다 –

+0

예, 속성 값이 문자열 인 경우 따옴표를 추가해야합니다. 'sb.AppendFormat ("\"{0} \ "", reader [ "TITTLE"]); 그러나 다시 한 번 json을 만들기 위해 라이브러리를 사용하는 것이 좋습니다. 예를 들어 TITTLE 값 중 하나에 따옴표'''가 포함되어 있다면, 이것을 처리해야합니다. 그렇지 않으면 jsonstring이 깨질 것입니다. – derpirscher

관련 문제