JSON Format - конвертировать набор данных в JSON - PullRequest
0 голосов
/ 19 августа 2011

У меня есть служба CF WCF. Там я хочу преобразовать в JSON String.DataSet, содержащую больше таблиц. В некоторых случаях в результате получается неправильный формат json.

  {
"Target1": [
    {
        "BusinessUnit": "MASS",
        "RetailerCode": "TEST0002"
    },
    {
        "BusinessUnit": "MASS",
        "RetailerCode": "TEST0008"
    }
]
}{
"PDCheque1": [
    {
        "BusinessUnit": "MASS",
        "AccountCode": "TEST0003"
    }
]
 } 0 {
"OutStanding1": [
    {
        "BusinessUnit": "MASS",
        "Year": "2010"
    },
    {
        "BusinessUnit": "MASS",
        "Year": "2010"
    }
]

}

Вот метод покрытия:

 //Converting dataset to json
    public String ConverTableToJson(DataSet dsDownloadJson){

        String tableData = "";
        StringBuilder Sb = new StringBuilder();
        Sb.Append("{\"");

        foreach (DataTable dt in dsDownloadJson.Tables)
        {
            DataTable dtDownloadJson = dt;
            string[] StrDc = new string[dtDownloadJson.Columns.Count];
            string HeadStr = string.Empty;

            Sb.Append( dtDownloadJson.TableName + "1\" : [");

            if (dtDownloadJson.Rows.Count > 0)
            {
                for (int i = 0; i < dtDownloadJson.Columns.Count; i++)
                {
                    StrDc[i] = dtDownloadJson.Columns[i].Caption;
                    HeadStr += "\"" + StrDc[i] + "\" : \"" + StrDc[i] + i.ToString() + "¾" + "\",";
                }
                if (HeadStr.Length > 0)
                {
                    HeadStr = HeadStr.Substring(0, HeadStr.Length - 1);

                    for (int i = 0; i < dtDownloadJson.Rows.Count; i++)
                    {

                        string TempStr = HeadStr;
                        Sb.Append("{");

                        for (int j = 0; j < dtDownloadJson.Columns.Count; j++)
                        {
                            TempStr = TempStr.Replace(dtDownloadJson.Columns[j] + j.ToString() + "¾", dtDownloadJson.Rows[i][j].ToString());
                        }

                        Sb.Append(TempStr + "},");
                    }

                    Sb = new StringBuilder(Sb.ToString().Substring(0, Sb.ToString().Length - 1));
                }
                else
                {
                    Sb.Append("0 }");
                }


            }
            else
            {
                Sb.Append("0 }");
            }
            Sb.Append("]}");

        }
        return Sb.ToString(); ;

    }

Если таблица не содержит записей, тогда ей нужно возвращать "0", как `Tablename [{0}] '

Это происходит следующим образом. Во 2-м сете PDCheque1 место не так.

Как я хочу отформатировать?

В Android я хочу получить каждый набор, используя имя таблицы, например, PDCheque1, 'Target1`, как мудрый.

1-й набор в порядке, чтобы получить результат. Когда я передаю JSONArray array = jsonobject.getJSONArray(tablename);' It say no `PDCheque1``

Пожалуйста, помогите мне ...

Заранее спасибо

Ответы [ 4 ]

1 голос
/ 20 августа 2011

Не изобретайте велосипед. Получить эту библиотеку: http://json.codeplex.com/

И посмотрите на помощь: http://james.newtonking.com/projects/json/help/

Это .net 4.0. Вы можете создать экземпляр объекта и затем сериализовать его:

string output = JsonConvert.SerializeObject(product);

Или используйте класс JsonWriter:

using (JsonWriter jsonWriter = new JsonTextWriter(sw))
{
  jsonWriter.Formatting = Formatting.Indented;

  jsonWriter.WriteStartObject();
  jsonWriter.WritePropertyName("CPU");
  jsonWriter.WriteValue("Intel");
  jsonWriter.WritePropertyName("PSU");
  jsonWriter.WriteValue("500W");
  jsonWriter.WritePropertyName("Drives");
  jsonWriter.WriteStartArray();
  jsonWriter.WriteValue("DVD read/writer");
  jsonWriter.WriteComment("(broken)");
  jsonWriter.WriteValue("500 gigabyte hard drive");
  jsonWriter.WriteValue("200 gigabype hard drive");
  jsonWriter.WriteEnd();
  jsonWriter.WriteEndObject();
}

веселись.

1 голос
/ 19 августа 2011

вам следует подумать о создании структуры JSONObject и позволить библиотеке json беспокоиться о форматировании.

Хотя, если вы действительно хотите сделать это таким образом, вот оно:

//Converting dataset to json
public String ConverTableToJson(DataSet dsDownloadJson) {
    String tableData = "";
    StringBuilder Sb = new StringBuilder();
    Sb.Append("{");

    foreach (DataTable dtDownloadJson in dsDownloadJson.Tables) {
        string HeadStr = string.Empty;

        Sb.Append("\"" + dtDownloadJson.TableName + "1\": [");

        for (int j = 0; j < dtDownloadJson.Rows.Count; j++) {
            Sb.Append("{");
            for (int i = 0; i < dtDownloadJson.Columns.Count; i++) {
                string caption = dtDownloadJson.Columns[i].Caption;
                Sb.Append("\"" + caption + "\" : \"" + dtDownloadJson.Rows[i][j].ToString() + "\",");
            }
            Sb.Append("},");
        }
        Sb.Append("],");
    }
    Sb.Append("}");
    return Sb.ToString();
}
1 голос
/ 19 августа 2011

Я не совсем понимаю ваш вопрос, но постараюсь вам помочь: Файл, который вы анализируете, является JSONArray. Когда вы анализируете файл, он возвращает jsonTokener. Вам нужно получить jsonarray этого.

JSONTokener tokener = new JSONTokener(yourfileinString);
JSONArray array = (JSONArray) tokener.nextValue();
JSONObject object = array.getJsonObject(0); // Here you get the object containing the array //Target1
For PDCheque1, just :

JSONObject pdcheque = array.getJsonObject(1);
if(pdcheque.has("PDCheque1")) {
    JSONArray pdchequeArray = pdcheque.getJSONArray("PDCheque1");
    JSONObject pdchequeObject =  pdchequeArray.getJSONObject(0); // 0 is the index, there is only one value //here
    if(pdcheque.has("BusinessUnit") {
         String businessUnit = pdcheque.getString("BusinessUnit");
    }
}

Если это не тот ответ, который вы ожидали, попробуйте переформулировать свой вопрос.

0 голосов
/ 19 августа 2011

Я думаю, было бы проще, если бы вы построили JSONArray или JSONObject, а не пытались построить строку самостоятельно.(см. документацию здесь: http://developer.android.com/reference/org/json/package-summary.html)

В конце просто сделайте myJSONObject.toString ();

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...