从JSON字符串解析JSON数组?

时间:2014-12-10 17:42:30

标签: c# json

在将此标记为重复之前,我想说我有自己的JsonObject实现,这就是我在这里寻求指导的原因。

我一直在试着如何从JSON字符串中解析出一个或多个JSON数组。我有以下代码:

class JsonObject
{
    public struct JsonProperty
    {
        public String Name { get; set; }
        public String Value { get; set; }
    }

    public Dictionary<String, JsonProperty> Properties;

    public JsonObject()
    {
        Properties = new Dictionary<String, JsonProperty>();
    }

    public JsonObject(String jsonString)
    {
        Properties = new Dictionary<String, JsonProperty>();
        ParseString(jsonString);
    }

    public JsonObject(List<String> properties)
    {
        Properties = new Dictionary<String, JsonProperty>();
        foreach (String s in properties)
        {
            String[] keyvaluepair = s.Split(':');
            JsonProperty prop = new JsonProperty();
            prop.Name = keyvaluepair[0];
            prop.Value = keyvaluepair[1];

            Properties.Add(prop.Name, prop);
        }
    }

    public void AddProperty(String name, String value)
    {
        JsonProperty prop = new JsonProperty();
        prop.Name = name;
        prop.Value = value;

        Properties.Add(prop.Name, prop);
    }

    private void ParseString(String jsonString)
    {
        String[] splitByComma = jsonString.Split(',');
        List<String[]> splitByColon = new List<String[]>();
        foreach (String s in splitByComma)
        {
            String[] split = s.Split(':');
            splitByColon.Add(split);
        }

        for (int i = 0; i < splitByColon.Count; i++)
        {
            for (int j = 0; j < splitByColon[i].Length; j++)
            {
                splitByColon[i][j] = splitByColon[i][j].Replace(",", "");
                splitByColon[i][j] = splitByColon[i][j].Replace("}", "");
                splitByColon[i][j] = splitByColon[i][j].Replace("{", "");
                splitByColon[i][j] = splitByColon[i][j].Replace("\"", "");
                splitByColon[i][j] = splitByColon[i][j].Replace("\\", "");
                splitByColon[i][j] = splitByColon[i][j].Replace(":", "");
            }
        }

        foreach (String[] array in splitByColon)
        {
            JsonProperty p = new JsonProperty();
            p.Name = array[0];
            p.Value = array[1];
            Properties.Add(p.Name, p);
        }
    }

    public override String ToString()
    {
        StringBuilder sb = new StringBuilder();
        sb.Append("{");
        int count = 1;
        foreach (KeyValuePair<String, JsonProperty> p in Properties)
        {
            sb.Append("\"" + p.Key.ToString() + "\"");
            sb.Append(":" + p.Value.Value.ToString());
            if (count < Properties.Count)
            {
                sb.Append(",");
            }
            count++;
        }
        sb.Append("}");
        return sb.ToString();
    }
}

}

它的效果非常好,但如果我想采用JSON阵列,我可能已将自己设计成一个角落。我可以得到一个看起来像这样的字符串:

{"SSN":"300391-1453","LoanAmount":50000.0,"LoanDuration":"2015/02/02","CreditScore":550,"Receipients":[{"bankXML":"bankXML","bankJSON":"bankJSON","bankWeb":"bankWeb"]}

我对如何正确取出该数组以及如何存储它无能为力。我的想法是找到数组,然后将数组中的每个对象解析为JsonProperty,然后将所有属性存储在一个名为value的JsonArray中。

我将如何实现这一目标?

1 个答案:

答案 0 :(得分:0)

您从json.org开始,其中包含(其中包括)JSON 语法。然后你编写一个 tokenizer ,它读取一个字符流并发出一个标记的流(例如,空格,数字,字符串,冒号,逗号,方括号(左/右) ),花括号(左/右)等。然后你写一个解析器来识别所需的语法,并将各种结构转换成所需的表示。

或者您可以使用许多预先编写的JSON序列化工具。