解析json文件以获取数据

时间:2019-07-04 11:16:31

标签: c# json parsing json.net

在c#中将Winform与以下nuget软件包一起使用

Private Sub TextBox1_Change()
    TextBox1.Value = Replace$(TextBox1.Value, " ", "")
End Sub

我有一个具有以下结构的文件文件夹

WindowsAPICodePack-Shell //used for old style folder dialog
Newtonsoft.Json

然后我尝试使用以下代码解析以获取一些信息

{
    "modelName": "3K05",
    "Fridge":  
    { 
    "color" : "white",
    "comment" : "sell at discount",  
    "version" : 1,  
    "date" : 20171102,  
    "features" : 264, 
    "purpose" : "Generic",  
    "format" : [1,5,10,0],  
    "build" : [[0,0,0,0,0,0], 
    [22,0,0,20,0,0], 
    [0,30,0,0,0,0], 
    [26,0,0,31,0,90], 
    [0,0,33,0,0,0], ]
    }  
    }

第一个问题是,除非将数据括在方括号[]中,否则我什么都无法工作。那么如何在没有方括号的情况下使它工作呢?

我的工作数据是

foreach (string filename in Directory.GetFiles(dialog.FileName))
                {
                   if (Path.GetExtension(filename) == ".APP") //name of json files
                   {
                       using (StreamReader r = new StreamReader(filename)) //read infile
                       {
                         dynamic array = JsonConvert.DeserializeObject(r.ReadToEnd()); //put into json array
                         foreach (var item in array) //parse thru array
                         {
                             if (item.modelName != null) listBox1.Items.Add(item.modelName); else listBox1.Items.Add("empty"); // get modelName

                             if (item.Fridge != null) listBox1.Items.Add(item.Fridge.color); else listBox1.Items.Add("empty"); //get color

                             if (item.Fridge != null) listBox1.Items.Add(item.Fridge.format); else listBox1.Items.Add("empty"); //get the string inside []

                             if (item.Fridge != null) listBox1.Items.Add(item.Fridge.build); else listBox1.Items.Add("empty"); //get second item as string [[ ] [ 2nd]]
                            }
                       }                       
                   }
                }

第二个问题是我现在如何从构建和格式化中获取信息。从构建开始,我希望能够将第二项作为字符串获得?

[
{
"modelName": "3K05",
"Fridge":  
{ 
"color" : "white",
"comment" : "sell at discount",  
"version" : 1,  
"date" : 20171102,  
"features" : 264, 
"purpose" : "Generic",  
"format" : [1,5,10,0],  
"build" : [[0,0,0,0,0,0], 
[22,0,0,20,0,0], 
[0,30,0,0,0,0], 
[26,0,0,31,0,90], 
[0,0,33,0,0,0], ]
}  
} 
]

目前,它作为收藏出现。我可以看到如何进入第一个(如果具有Fridge.color并返回白色),但是我该如何进入Fridge.build。


我的工作方式是答案的混合体,所以感谢所有回答的人。

我学习了VS的新部分,即编辑->选择性粘贴->将Json粘贴为类

然后我把它当作

22,0,0,20,0,0

xxxx = Json类的Rootobject实例 yyyy = Json类中的项目。这就是我的理解,但是我使用的词可能不正确。

以这种方式进行操作还向我展示了构建信息只是一个二维数组,我很乐意使用。

再次感谢该站点,我对C#有了更多的了解

1 个答案:

答案 0 :(得分:2)

以下类使用Json2CSharp为您的json建模。

public class Fridge
{
    public string color { get; set; }
    public string comment { get; set; }
    public int version { get; set; }
    public int date { get; set; }
    public int features { get; set; }
    public string purpose { get; set; }
    public List<int> format { get; set; }
    public List<List<int>> build { get; set; }
}

public class RootObject
{
    public string modelName { get; set; }
    public Fridge Fridge { get; set; }
}

请注意,只要您的json字符串有效,您也可以在Visual Studio中执行此操作。只需转到编辑->粘贴特殊。.

然后您可以进行以下消费:

var myObject=JsonConvert.DeserializeObject<RootObject>();
//get the format list
var formats=myObject.Fridge.format;
var build=myObject.Fridge.build;