1.解析json & array
(1)json解析
using Newtonsoft. Json. Linq ;
string json = @"{CPU: 'Intel',
Drives: [
'DVD read/writer',
'500 gigabyte hard drive']}" ;
JObject o = JObject. Parse ( json) ;
Console. WriteLine ( o. GetType ( ) ) ;
Console. WriteLine ( o. ToString ( ) ) ;
Console. WriteLine ( o[ "CPU" ] ) ;
Console. WriteLine ( o[ "Drives" ] ) ;
Console. ReadKey ( ) ;
Newtonsoft. Json. Linq. JObject
{
"CPU" : "Intel" ,
"Drives" : [
"DVD read/writer" ,
"500 gigabyte hard drive"
]
}
Intel
[
"DVD read/writer" ,
"500 gigabyte hard drive"
]
(2)array解析
using Newtonsoft. Json. Linq ;
string json = @"['Small','Medium','Large']" ;
JArray a = JArray. Parse ( json) ;
Console. WriteLine ( a. GetType ( ) ) ;
Console. WriteLine ( a. ToString ( ) ) ;
Console. WriteLine ( a. Count ( ) ) ;
Console. ReadKey ( ) ;
Newtonsoft. Json. Linq. JArray
[
"Small" ,
"Medium" ,
"Large"
]
3
(3)从文件中读取json
#Progress.cs
using Newtonsoft. Json. Linq ;
using Newtonsoft. Json ;
namespace Progress
{
public class Progress
{
public static void Main ( )
{
var jo = OpenJsonFile ( ) ;
var driver = jo[ "Drives" ] [ 1 ] ;
Console. WriteLine ( $"-------> { driver } " ) ;
Console. ReadKey ( ) ;
}
public static JObject OpenJsonFile ( )
{
string fileName = @"C:\Users\XXX\repos\JsonStudyDeom\JsonFiles\FirstJsonFile.json" ;
StreamReader file = File. OpenText ( fileName) ;
JsonTextReader reader = new JsonTextReader ( file) ;
JObject jsonObject = ( JObject) JToken. ReadFrom ( reader) ;
return jsonObject;
}
}
}
# ------->500 gigabyte hard drive
# another demo for parse json file
using ( StreamReader reader = File. OpenText ( @"c:\person.json" ) )
{
JObject o = ( JObject) JToken. ReadFrom ( new JsonTextReader ( reader) ) ;
}
2.json/Aarray 的创建
(1) array 的创建
using Newtonsoft. Json. Linq ;
namespace Progress
{
public class Progress
{
public static void Main ( )
{
JArray array = new JArray ( ) ;
JValue text = new JValue ( "Manual text" ) ;
JValue date = new JValue ( new DateTime ( 2000 , 5 , 23 ) ) ;
array. Add ( text) ;
array. Add ( date) ;
array. Add ( 123 ) ;
array. Add ( "lastItem" ) ;
Console. WriteLine ( array. ToString ( ) ) ;
Console. WriteLine ( array. Count ( ) ) ;
Console. WriteLine ( array[ 1 ] ) ;
Console. ReadKey ( ) ;
}
}
}
[
"Manual text" ,
"2000-05-23T00:00:00" ,
123 ,
"lastItem"
]
4
2000 / 5 / 23 0 : 00 : 00
(2) json 的创建
using Newtonsoft. Json. Linq ;
namespace Progress
{
public class Progress
{
public static void Main ( )
{
JObject o = JObject. FromObject ( new
{
channel = new
{
title = "James Newton-King" ,
link = "http://james.newtonking.com" ,
description = "James Newton-King's blog." ,
}
} ) ;
Console. WriteLine ( o. ToString ( ) ) ;
Console. ReadKey ( ) ;
}
}
}
{
"channel" : {
"title" : "James Newton-King" ,
"link" : "http://james.newtonking.com" ,
"description" : "James Newton-King's blog."
}
}
3.SelectToken 获取json中指定的value/values
(1) SelectToken 获取json中对应的值
JObject o = JObject. Parse ( @"{
'Stores': [
'Lambton Quay',
'Willis Street'
],
'Manufacturers': [
{
'Name': 'Acme Co',
'Products': [
{
'Name': 'Anvil',
'Price': 50
}
]
},
{
'Name': 'Contoso',
'Products': [
{
'Name': 'Elbow Grease',
'Price': 99.95
},
{
'Name': 'Headlight Fluid',
'Price': 4
}
]
}
]
}" ) ;
string name = ( string ) o. SelectToken ( "Manufacturers[0].Name" ) ;
decimal productPrice = ( decimal ) o. SelectToken ( "Manufacturers[0].Products[0].Price" ) ;
string productName = ( string ) o. SelectToken ( "Manufacturers[1].Products[0].Name" ) ;
(2) SelectToken with JsonPath
JObject o = JObject. Parse ( @"{
'Stores': [
'Lambton Quay',
'Willis Street'
],
'Manufacturers': [
{
'Name': 'Acme Co',
'Products': [
{
'Name': 'Anvil',
'Price': 50
}
]
},
{
'Name': 'Contoso',
'Products': [
{
'Name': 'Elbow Grease',
'Price': 99.95
},
{
'Name': 'Headlight Fluid',
'Price': 4
}
]
}
]
}" ) ;
JToken acme = o. SelectToken ( "$.Manufacturers[?(@.Name == 'Acme Co')]" ) ;
Console. WriteLine ( acme) ;
IEnumerable< JToken> pricyProducts = o. SelectTokens ( "$..Products[?(@.Price >= 50)].Name" ) ;
foreach ( JToken item in pricyProducts)
{
Console. WriteLine ( item) ;
}
# another demo
# 获取pins节点下,dataType== "Group" 的字典,最终获取的字段为该字典中data. imageData. fill节点的value
$. pins. [ ? ( @. dataType== 'Group') ] . data. imageData. fill
(3) SelectToken with LINQ
IList< string > storeNames = o. SelectToken ( "Stores" ) . Select ( s => ( string ) s) . ToList ( ) ;
IList< string > firstProductNames = o[ "Manufacturers" ] . Select ( m => ( string ) m. SelectToken ( "Products[1].Name" ) ) . ToList ( ) ;
decimal totalPrice = o[ "Manufacturers" ] . Sum ( m => ( decimal ) m. SelectToken ( "Products[0].Price" ) ) ;