我有一个带JSON
的js文件(没有代码)类似的东西:
Name1 = {
p1:0,
p2:1,
p3:2
};
Name2 = {
p1:"None",
p2:"Snappy",
p3:"gzip"
};
我希望在C#中解析它,但Newtonsoft.JSON
不知道如何管理"Name = "
。
我该怎么做?
提前谢谢。
答案 0 :(得分:1)
正如我的评论所述,这些都不是有效的JSON字符串。
您的结构作为有效JSON
的示例{
"Name": {
"p1": 0,
"p2": 1,
"p3": 3
}
}
和强>
{
"Name": {
"p1": "None",
"p2": "Snappy",
"p3": "gzip"
}
}
反序列化时需要根对象。
E.g。你的类结构看起来像:
public class RootObject {
public Name Name {get; set;}
}
public class Name {
public string p1 {get; set;}
public string p2 {get; set;}
public string p3 {get; set;}
}
并且会像这样反序列化:
var json = ...; //Load from file or whatever.
var myObj = JsonConvert.DeserializeObject<RootObject>(json);
var p1 = myObj.Name.p1;
答案 1 :(得分:0)
将您的文件转换为合法的JSON字符串,然后解析它
string data = //get your data somehow - (ex.loading from file)
int indexStart;
data = data.Replace(";", String.Empty);
while ((indexStart = data.IndexOf("{")) > 0)
{
//convert the set of data to be legetimate JSON string
int indexEnd = data.IndexOf("}");
string temp = data.Substring(indexStart, indexEnd - indexStart + 1);
//Deserializ string
var obj = JsonConvert.DeserializeObject<SomeData>(temp);
//prepare the data for the next iteration
data = data.Substring(indexEnd + 1);
}
以及适合JSON格式的类
public class SomeData
{
public string p1 { get; set; }
public string p2 { get; set; }
public string p3 { get; set; }
}
答案 2 :(得分:-2)
这是一个解析字符串的代码
class name {
public dynamic p1 { get; set; }
public dynamic p2 { get; set; }
public dynamic p3 { get; set; }
}
public static void Main(string[] args)
{
string code = @"Name1 = {
p1:0,
p2:1,
p3:2
};
Name2 = {
p1:""None"",
p2: ""Snappy"",
p3: ""gzip""
};";
List<name> l = new List<name>();
string[] partsBySamicolon = code.Split(';');
foreach(string s in partsBySamicolon){
if (!string.IsNullOrEmpty(s))
{
string[] partByBraces = s.Split('{');
name n = new name();
string[] partsbyComma = partByBraces[1].Split('}')[0].Split(',');
foreach (string ss in partsbyComma)
{
if (!string.IsNullOrEmpty(ss))
{
if (ss.Contains("p1"))
n.p1 = ss.Split(':')[1].Trim();
if (ss.Contains("p2"))
n.p2 = ss.Split(':')[1].Trim();
if (ss.Contains("p3"))
n.p3 = ss.Split(':')[1].Trim();
}
}
l.Add(n);
}
}
Console.Read();
}