I have following json:
我跟随json:
{
"serverTime": "2013-08-12 02:45:55,558",
"data": [
{
"key1": 1,
"key2": {},
"key3": {
"key4": [
""
],
"key5": "test2"
},
"key7": 0
},
{
"key8": 1,
"key9": {},
"key10": {
"key4": [
""
],
"key9": "test2"
},
"key11": 0
}
]
}
I want to get values as key value pair. Something like:
我想将值作为键值对。就像是:
jsonObject[data][0]
should give first item of the data array.
应该给出数据数组的第一项。
I am using JSONFx.net. But it gives strongly typed objects. I do not want that. Is there any way to parse JSON as key value as I mentioned earlier?
我正在使用JSONFx.net。但它提供了强类型对象。我不要那个。有没有办法解析JSON作为我前面提到的关键值?
Thanks
4 个解决方案
#1
5
Try this:
using System;
using System.IO;
using Newtonsoft.Json;
class Program
{
static void Main(string[] args)
{
var json = File.ReadAllText("input.txt");
var a = new { serverTime = "", data = new object[] { } };
var c = new JsonSerializer();
dynamic jsonObject = c.Deserialize(new StringReader(json), a.GetType());
Console.WriteLine(jsonObject.data[0]);
}
}
#2
3
If you're not averse to using Json.NET, you can do this:
如果你不反对使用Json.NET,你可以这样做:
var jsonString = @"
{
""serverTime"": ""2013-08-12 02:45:55,558"",
""data"": [
{
""key1"": 1,
""key2"": {},
""key3"": {
""key4"": [
""""
],
""key5"": ""test2""
},
""key7"": 0
},
{
""key8"": 1,
""key9"": {},
""key10"": {
""key4"": [
""""
],
""key9"": ""test2""
},
""key11"": 0
}
]
}";
var jsonResult = JsonConvert.DeserializeObject<Dictionary<string, dynamic>>(jsonString);
var firstItem = jsonResult["data"][0];
firstItem
would be an array of the first item in the data
array:
firstItem将是数据数组中第一个项的数组:
Hope this helps.
希望这可以帮助。
#3
1
First create classes to parse string
首先创建解析字符串的类
public class Key2
{
}
public class Key3
{
public List<string> key4 { get; set; }
public string key5 { get; set; }
}
public class Key9
{
}
public class Key10
{
public List<string> key4 { get; set; }
public string key9 { get; set; }
}
public class Datum
{
public int key1 { get; set; }
public Key2 key2 { get; set; }
public Key3 key3 { get; set; }
public int key7 { get; set; }
public int? key8 { get; set; }
public Key9 key9 { get; set; }
public Key10 key10 { get; set; }
public int? key11 { get; set; }
}
public class RootObject
{
public string serverTime { get; set; }
public List<Datum> data { get; set; }
}
add reference of Newtonsoft.Json.dll
添加Newtonsoft.Json.dll的参考
RootObject obj = JsonConvert.DeserializeObject<RootObject>(jsonData);
then you can access values .
然后你可以访问值。
#4
1
If you want to do this without third party libraries then do:
如果你想在没有第三方库的情况下这样做,那么:
I would use the following code:
我会使用以下代码:
var deserializer = new JavaScriptSerializer();
var someObject = deserializer.DeserializeObject(json);
string serverTime = someObject["serverTime"].ToString();
Dictionary<string, int> data = someObject["data"] as Dictionary<string, int>;
Give it a go.
搏一搏。
Edit: You may need to change the last line to:
编辑:您可能需要将最后一行更改为:
Dictionary<string, int?> data = someObject["data"] as Dictionary<string, int?>;
#1
5
Try this:
using System;
using System.IO;
using Newtonsoft.Json;
class Program
{
static void Main(string[] args)
{
var json = File.ReadAllText("input.txt");
var a = new { serverTime = "", data = new object[] { } };
var c = new JsonSerializer();
dynamic jsonObject = c.Deserialize(new StringReader(json), a.GetType());
Console.WriteLine(jsonObject.data[0]);
}
}
#2
3
If you're not averse to using Json.NET, you can do this:
如果你不反对使用Json.NET,你可以这样做:
var jsonString = @"
{
""serverTime"": ""2013-08-12 02:45:55,558"",
""data"": [
{
""key1"": 1,
""key2"": {},
""key3"": {
""key4"": [
""""
],
""key5"": ""test2""
},
""key7"": 0
},
{
""key8"": 1,
""key9"": {},
""key10"": {
""key4"": [
""""
],
""key9"": ""test2""
},
""key11"": 0
}
]
}";
var jsonResult = JsonConvert.DeserializeObject<Dictionary<string, dynamic>>(jsonString);
var firstItem = jsonResult["data"][0];
firstItem
would be an array of the first item in the data
array:
firstItem将是数据数组中第一个项的数组:
Hope this helps.
希望这可以帮助。
#3
1
First create classes to parse string
首先创建解析字符串的类
public class Key2
{
}
public class Key3
{
public List<string> key4 { get; set; }
public string key5 { get; set; }
}
public class Key9
{
}
public class Key10
{
public List<string> key4 { get; set; }
public string key9 { get; set; }
}
public class Datum
{
public int key1 { get; set; }
public Key2 key2 { get; set; }
public Key3 key3 { get; set; }
public int key7 { get; set; }
public int? key8 { get; set; }
public Key9 key9 { get; set; }
public Key10 key10 { get; set; }
public int? key11 { get; set; }
}
public class RootObject
{
public string serverTime { get; set; }
public List<Datum> data { get; set; }
}
add reference of Newtonsoft.Json.dll
添加Newtonsoft.Json.dll的参考
RootObject obj = JsonConvert.DeserializeObject<RootObject>(jsonData);
then you can access values .
然后你可以访问值。
#4
1
If you want to do this without third party libraries then do:
如果你想在没有第三方库的情况下这样做,那么:
I would use the following code:
我会使用以下代码:
var deserializer = new JavaScriptSerializer();
var someObject = deserializer.DeserializeObject(json);
string serverTime = someObject["serverTime"].ToString();
Dictionary<string, int> data = someObject["data"] as Dictionary<string, int>;
Give it a go.
搏一搏。
Edit: You may need to change the last line to:
编辑:您可能需要将最后一行更改为:
Dictionary<string, int?> data = someObject["data"] as Dictionary<string, int?>;