在将此标记为重复之前,我想说我有自己的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中。
我将如何实现这一目标?
答案 0 :(得分:0)
您从json.org开始,其中包含(其中包括)JSON 语法。然后你编写一个 tokenizer ,它读取一个字符流并发出一个标记的流(例如,空格,数字,字符串,冒号,逗号,方括号(左/右) ),花括号(左/右)等。然后你写一个解析器来识别所需的语法,并将各种结构转换成所需的表示。
或者您可以使用许多预先编写的JSON序列化工具。