新时尚Windows8开发(32):Json数据处理(A)

SON是啥?大家不陌生了吧,估计有人比我还懂,这玩意儿其实我只懂点皮毛,对,就是皮毛,皮和毛,皮包着毛,你看看JSON对象是不是这样?

外面套着一对大括号({})是皮,里面有很多毛毛,其实一个JSON对象就好像一个字典集合,有key,也有value,当然,也可以没有key。你看,一个标准的JSON对象大概是这样的。

{

      '键名' : 键值,

      '键名' :  键值,

      '键名' : 键值

}

 

如果是集合,如数组之类的,就多个对象放在 [ ...] 中,用逗号隔开,记得是英文的逗号。

 

 

案例1:从JSON字符串产生JSON对象

这个例子,我们来“调研”一下,如何从一个JSON结构的字符串生成一个JSON对象。

1、新建一个空白页面的“板砖”风格应用。

2、主页的布局就直接Ctrl + V XAML代码了,不然又有人说:“这和Win8有毛关系啊,这不是WPF中的XAML吗?”

[html]  view plain copy print ?
  1. <Page  
  2.     x:Class="App3.MainPage"  
  3.     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"  
  4.     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"  
  5.     xmlns:local="using:App3"  
  6.     xmlns:d="http://schemas.microsoft.com/expression/blend/2008"  
  7.     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"  
  8.     mc:Ignorable="d">  
  9.       
  10.     <Page.Resources>  
  11.         <Style x:Key="tbstyle" TargetType="TextBlock">  
  12.             <Setter Property="FontSize" Value="25"/>  
  13.         </Style>  
  14.     </Page.Resources>  
  15.   
  16.     <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">  
  17.         <StackPanel Margin="20">  
  18.             <Button Content="从JSON字符串生成对象" Click="onClick"/>  
  19.             <Grid Margin="5,19,6,0">  
  20.                 <Grid.RowDefinitions>  
  21.                     <RowDefinition Height="auto"/>  
  22.                     <RowDefinition Height="auto"/>  
  23.                     <RowDefinition Height="auto"/>  
  24.                     <RowDefinition Height="auto"/>  
  25.                 </Grid.RowDefinitions>  
  26.                 <Grid.ColumnDefinitions>  
  27.                     <ColumnDefinition Width="auto"/>  
  28.                     <ColumnDefinition Width="auto"/>  
  29.                 </Grid.ColumnDefinitions>  
  30.                 <TextBlock Grid.Row="0" Grid.Column="0" Text="编号:" Style="{StaticResource tbstyle}"/>  
  31.                 <TextBlock x:Name="tbNO" Grid.Column="1" Grid.Row="0" Style="{StaticResource tbstyle}"/>  
  32.                 <TextBlock Grid.Column="0" Grid.Row="1" Text="姓名:" Style="{StaticResource tbstyle}"/>  
  33.                 <TextBlock x:Name="tbName" Grid.Row="1" Grid.Column="1" Style="{StaticResource tbstyle}"/>  
  34.                 <TextBlock Grid.Column="0" Grid.Row="2" Text="城市:" Style="{StaticResource tbstyle}"/>  
  35.                 <TextBlock x:Name="tbCity" Grid.Row="2" Grid.Column="1" Style="{StaticResource tbstyle}"/>  
  36.                 <TextBlock Grid.Row="3" Grid.Column="0" Text="年龄:" Style="{StaticResource tbstyle}"/>  
  37.                 <TextBlock x:Name="tbAge" Grid.Row="3" Grid.Column="1" Style="{StaticResource tbstyle}"/>  
  38.             </Grid>  
  39.         </StackPanel>  
  40.     </Grid>  
  41. </Page>  


 

3、后台的代码,主要是处理按钮的Click事件,我贴个完整的。

[csharp]  view plain copy print ?
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.IO;  
  4. using System.Linq;  
  5. using Windows.Foundation;  
  6. using Windows.Foundation.Collections;  
  7. using Windows.UI.Xaml;  
  8. using Windows.UI.Xaml.Controls;  
  9. using Windows.UI.Xaml.Controls.Primitives;  
  10. using Windows.UI.Xaml.Data;  
  11. using Windows.UI.Xaml.Input;  
  12. using Windows.UI.Xaml.Media;  
  13. using Windows.UI.Xaml.Navigation;  
  14. using Windows.Data.Json;  
  15.   
  16. namespace App3  
  17. {  
  18.     /// <summary>  
  19.     /// 可用于自身或导航至 Frame 内部的空白页。  
  20.     /// </summary>  
  21.     public sealed partial class MainPage : Page  
  22.     {  
  23.         public MainPage()  
  24.         {  
  25.             this.InitializeComponent();  
  26.         }  
  27.   
  28.   
  29.         private void onClick(object sender, RoutedEventArgs e)  
  30.         {  
  31.             // JSON字符串  
  32.             string jsonString = "{" +  
  33.                                     "\"No\":\"000-2145\"," +  
  34.                                     "\"Name\":\"小王\"," +  
  35.                                     "\"City\":\"天津\"," +  
  36.                                     "\"Age\":185" +  
  37.                                 "}";  
  38.             // 生成JSON对象  
  39.             JsonObject obj = JsonObject.Parse(jsonString);  
  40.             // 从JSON对象中取出数据  
  41.             this.tbNO.Text = obj.GetNamedString("No");  
  42.             this.tbName.Text = obj.GetNamedString("Name");  
  43.             this.tbCity.Text = obj.GetNamedString("City");  
  44.             this.tbAge.Text = obj.GetNamedNumber("Age").ToString();  
  45.         }  
  46.     }  
  47. }  


从代码中,你会看到,要处理与JSON有关的数据,先引入Windows.Data.Json命名空间。

因为我们的JSON对象是带命名键的,所以,在生成JsonObject后,可以通过调用以下方法来取得对应字段的值:

【对JSON来说,无非就是字符串,布尔类型,数值,数组或者复合对象】

GetNamedArray —— 如果对应字段是一个JSON对象数组,就可以考虎调用该方法。

GetNamedBoolean,GetNamedNumber,GetNamedString,GetNamedObject —— 这些方法就简单了,都是取出单个指定类型的值。

现在运行一下,点击页面最上方的按钮,就会看到结果了。

 

 

案例2:将JSON对象转换为字符串

本个例子貌似和上面的例子相反,是将JSON对象变成字符串表示形式。

1、新建应用程序项目。

2、MainPage.xaml的UI如下:

[html]  view plain copy print ?
  1. <Page  
  2.     x:Class="App1.MainPage"  
  3.     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"  
  4.     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"  
  5.     xmlns:local="using:App1"  
  6.     xmlns:d="http://schemas.microsoft.com/expression/blend/2008"  
  7.     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"  
  8.     mc:Ignorable="d">  
  9.   
  10.     <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">  
  11.         <StackPanel Margin="20">  
  12.             <Button Content="生成JSON字符串" Click="onClick"/>  
  13.             <TextBox x:Name="txtJson" Margin="8,17,8,0" Height="400" TextWrapping="Wrap" FontSize="20"/>  
  14.         </StackPanel>  
  15.     </Grid>  
  16. </Page>  

单击按钮后,生成JSON对象,并在下面的TextBox中显示转换的字符串。

 

3、处理按钮的Click事件。记得引入Windows.Data.Json命名空间。

[csharp]  view plain copy print ?
  1. private void onClick(object sender, RoutedEventArgs e)  
  2. {  
  3.     // 创建第一团队的成员对象  
  4.     JsonObject menb1 = new JsonObject();  
  5.     menb1.SetNamedValue("姓名", JsonValue.CreateStringValue("老刘"));  
  6.     menb1.SetNamedValue("人品指数", JsonValue.CreateNumberValue(250));  
  7.     menb1.SetNamedValue("是否砖家", JsonValue.CreateBooleanValue(true));  
  8.     JsonObject menb2 = new JsonObject();  
  9.     menb2.SetNamedValue("姓名", JsonValue.CreateStringValue("老赵"));  
  10.     menb2.SetNamedValue("人品指数", JsonValue.CreateNumberValue(97));  
  11.     menb2.SetNamedValue("是否砖家", JsonValue.CreateBooleanValue(false));  
  12.     JsonArray arr1 = new JsonArray();  
  13.     arr1.Add(menb1);  
  14.     arr1.Add(menb2);  
  15.     // 第一团队信息  
  16.     JsonObject teamA = new JsonObject();  
  17.     teamA.SetNamedValue("团队名称", JsonValue.CreateStringValue("牛B一队"));  
  18.     teamA.SetNamedValue("成员列表", arr1);  
  19.     // ------------------------------------------------------------------------------  
  20.     // 第二团队的成员  
  21.     JsonObject menbB1 = new JsonObject();  
  22.     menbB1.SetNamedValue("姓名", JsonValue.CreateStringValue("小黄"));  
  23.     menbB1.SetNamedValue("人品指数", JsonValue.CreateNumberValue(108));  
  24.     menbB1.SetNamedValue("是否砖家", JsonValue.CreateBooleanValue(false));  
  25.     JsonObject menbB2 = new JsonObject();  
  26.     menbB2.SetNamedValue("姓名", JsonValue.CreateStringValue("小龙"));  
  27.     menbB2.SetNamedValue("人品指数", JsonValue.CreateNumberValue(392));  
  28.     menbB2.SetNamedValue("是否砖家", JsonValue.CreateBooleanValue(true));  
  29.     JsonObject menbB3 = new JsonObject();  
  30.     menbB3.SetNamedValue("姓名", JsonValue.CreateStringValue("老袁"));  
  31.     menbB3.SetNamedValue("人品指数", JsonValue.CreateNumberValue(65));  
  32.     menbB3.SetNamedValue("是否砖家", JsonValue.CreateBooleanValue(false));  
  33.     JsonArray arr2 = new JsonArray();  
  34.     arr2.Add(menbB1);  
  35.     arr2.Add(menbB2);  
  36.     arr2.Add(menbB3);  
  37.     // 第二团队信息  
  38.     JsonObject teamB = new JsonObject();  
  39.     teamB.SetNamedValue("团队名称", JsonValue.CreateStringValue("牛B二队"));  
  40.     teamB.SetNamedValue("成员列表", arr2);  
  41.   
  42.     // 将两个团队的信息放到一个数组中  
  43.     JsonArray teams = new JsonArray();  
  44.     teams.Add(teamA);  
  45.     teams.Add(teamB);  
  46.   
  47.     // 将以上JSON对象转换为字符串  
  48.     this.txtJson.Text = teams.Stringify();  
  49. }  


上面代码演示两个牛B团队的基本信息,而每个团队中又包含各自的成员信息。

结果就像下图所示:

 

是不是觉得这种生成JSON的方法有些复杂有点痛苦呢? 勿急,下一篇博文,我们将玩一些简单的东东。


转载:http://blog.csdn.net/tcjiaan/article/details/8181482

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值