新时尚Windows8开发(32):Json数据处理(A)
2012-11-14 10:47
387 查看
JSON是啥?大家不陌生了吧,估计有人比我还懂,这玩意儿其实我只懂点皮毛,对,就是皮毛,皮和毛,皮包着毛,你看看JSON对象是不是这样?
外面套着一对大括号({})是皮,里面有很多毛毛,其实一个JSON对象就好像一个字典集合,有key,也有value,当然,也可以没有key。你看,一个标准的JSON对象大概是这样的。
{
'键名' : 键值,
'键名' : 键值,
'键名' : 键值
}
如果是集合,如数组之类的,就多个对象放在 [ ...] 中,用逗号隔开,记得是英文的逗号。
1、新建一个空白页面的“板砖”风格应用。
2、主页的布局就直接Ctrl + V XAML代码了,不然又有人说:“这和Win8有毛关系啊,这不是WPF中的XAML吗?”
3、后台的代码,主要是处理按钮的Click事件,我贴个完整的。
从代码中,你会看到,要处理与JSON有关的数据,先引入Windows.Data.Json命名空间。
因为我们的JSON对象是带命名键的,所以,在生成JsonObject后,可以通过调用以下方法来取得对应字段的值:
【对JSON来说,无非就是字符串,布尔类型,数值,数组或者复合对象】
GetNamedArray —— 如果对应字段是一个JSON对象数组,就可以考虎调用该方法。
GetNamedBoolean,GetNamedNumber,GetNamedString,GetNamedObject —— 这些方法就简单了,都是取出单个指定类型的值。
现在运行一下,点击页面最上方的按钮,就会看到结果了。
1、新建应用程序项目。
2、MainPage.xaml的UI如下:
单击按钮后,生成JSON对象,并在下面的TextBox中显示转换的字符串。
3、处理按钮的Click事件。记得引入Windows.Data.Json命名空间。
上面代码演示两个牛B团队的基本信息,而每个团队中又包含各自的成员信息。
结果就像下图所示:
是不是觉得这种生成JSON的方法有些复杂有点痛苦呢? 勿急,下一篇博文,我们将玩一些简单的东东。
外面套着一对大括号({})是皮,里面有很多毛毛,其实一个JSON对象就好像一个字典集合,有key,也有value,当然,也可以没有key。你看,一个标准的JSON对象大概是这样的。
{
'键名' : 键值,
'键名' : 键值,
'键名' : 键值
}
如果是集合,如数组之类的,就多个对象放在 [ ...] 中,用逗号隔开,记得是英文的逗号。
案例1:从JSON字符串产生JSON对象
这个例子,我们来“调研”一下,如何从一个JSON结构的字符串生成一个JSON对象。1、新建一个空白页面的“板砖”风格应用。
2、主页的布局就直接Ctrl + V XAML代码了,不然又有人说:“这和Win8有毛关系啊,这不是WPF中的XAML吗?”
<Page x:Class="App3.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:App3" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d"> <Page.Resources> <Style x:Key="tbstyle" TargetType="TextBlock"> <Setter Property="FontSize" Value="25"/> </Style> </Page.Resources> <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}"> <StackPanel Margin="20"> <Button Content="从JSON字符串生成对象" Click="onClick"/> <Grid Margin="5,19,6,0"> <Grid.RowDefinitions> <RowDefinition Height="auto"/> <RowDefinition Height="auto"/> <RowDefinition Height="auto"/> <RowDefinition Height="auto"/> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition Width="auto"/> <ColumnDefinition Width="auto"/> </Grid.ColumnDefinitions> <TextBlock Grid.Row="0" Grid.Column="0" Text="编号:" Style="{StaticResource tbstyle}"/> <TextBlock x:Name="tbNO" Grid.Column="1" Grid.Row="0" Style="{StaticResource tbstyle}"/> <TextBlock Grid.Column="0" Grid.Row="1" Text="姓名:" Style="{StaticResource tbstyle}"/> <TextBlock x:Name="tbName" Grid.Row="1" Grid.Column="1" Style="{StaticResource tbstyle}"/> <TextBlock Grid.Column="0" Grid.Row="2" Text="城市:" Style="{StaticResource tbstyle}"/> <TextBlock x:Name="tbCity" Grid.Row="2" Grid.Column="1" Style="{StaticResource tbstyle}"/> <TextBlock Grid.Row="3" Grid.Column="0" Text="年龄:" Style="{StaticResource tbstyle}"/> <TextBlock x:Name="tbAge" Grid.Row="3" Grid.Column="1" Style="{StaticResource tbstyle}"/> </Grid> </StackPanel> </Grid> </Page>
3、后台的代码,主要是处理按钮的Click事件,我贴个完整的。
using System; using System.Collections.Generic; using System.IO; using System.Linq; using Windows.Foundation; using Windows.Foundation.Collections; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; using Windows.UI.Xaml.Controls.Primitives; using Windows.UI.Xaml.Data; using Windows.UI.Xaml.Input; using Windows.UI.Xaml.Media; using Windows.UI.Xaml.Navigation; using Windows.Data.Json; namespace App3 { /// <summary> /// 可用于自身或导航至 Frame 内部的空白页。 /// </summary> public sealed partial class MainPage : Page { public MainPage() { this.InitializeComponent(); } private void onClick(object sender, RoutedEventArgs e) { // JSON字符串 string jsonString = "{" + "\"No\":\"000-2145\"," + "\"Name\":\"小王\"," + "\"City\":\"天津\"," + "\"Age\":185" + "}"; // 生成JSON对象 JsonObject obj = JsonObject.Parse(jsonString); // 从JSON对象中取出数据 this.tbNO.Text = obj.GetNamedString("No"); this.tbName.Text = obj.GetNamedString("Name"); this.tbCity.Text = obj.GetNamedString("City"); this.tbAge.Text = obj.GetNamedNumber("Age").ToString(); } } }
从代码中,你会看到,要处理与JSON有关的数据,先引入Windows.Data.Json命名空间。
因为我们的JSON对象是带命名键的,所以,在生成JsonObject后,可以通过调用以下方法来取得对应字段的值:
【对JSON来说,无非就是字符串,布尔类型,数值,数组或者复合对象】
GetNamedArray —— 如果对应字段是一个JSON对象数组,就可以考虎调用该方法。
GetNamedBoolean,GetNamedNumber,GetNamedString,GetNamedObject —— 这些方法就简单了,都是取出单个指定类型的值。
现在运行一下,点击页面最上方的按钮,就会看到结果了。
案例2:将JSON对象转换为字符串
本个例子貌似和上面的例子相反,是将JSON对象变成字符串表示形式。1、新建应用程序项目。
2、MainPage.xaml的UI如下:
<Page x:Class="App1.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:App1" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d"> <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}"> <StackPanel Margin="20"> <Button Content="生成JSON字符串" Click="onClick"/> <TextBox x:Name="txtJson" Margin="8,17,8,0" Height="400" TextWrapping="Wrap" FontSize="20"/> </StackPanel> </Grid> </Page>
单击按钮后,生成JSON对象,并在下面的TextBox中显示转换的字符串。
3、处理按钮的Click事件。记得引入Windows.Data.Json命名空间。
private void onClick(object sender, RoutedEventArgs e) { // 创建第一团队的成员对象 JsonObject menb1 = new JsonObject(); menb1.SetNamedValue("姓名", JsonValue.CreateStringValue("老刘")); menb1.SetNamedValue("人品指数", JsonValue.CreateNumberValue(250)); menb1.SetNamedValue("是否砖家", JsonValue.CreateBooleanValue(true)); JsonObject menb2 = new JsonObject(); menb2.SetNamedValue("姓名", JsonValue.CreateStringValue("老赵")); menb2.SetNamedValue("人品指数", JsonValue.CreateNumberValue(97)); menb2.SetNamedValue("是否砖家", JsonValue.CreateBooleanValue(false)); JsonArray arr1 = new JsonArray(); arr1.Add(menb1); arr1.Add(menb2); // 第一团队信息 JsonObject teamA = new JsonObject(); teamA.SetNamedValue("团队名称", JsonValue.CreateStringValue("牛B一队")); teamA.SetNamedValue("成员列表", arr1); // ------------------------------------------------------------------------------ // 第二团队的成员 JsonObject menbB1 = new JsonObject(); menbB1.SetNamedValue("姓名", JsonValue.CreateStringValue("小黄")); menbB1.SetNamedValue("人品指数", JsonValue.CreateNumberValue(108)); menbB1.SetNamedValue("是否砖家", JsonValue.CreateBooleanValue(false)); JsonObject menbB2 = new JsonObject(); menbB2.SetNamedValue("姓名", JsonValue.CreateStringValue("小龙")); menbB2.SetNamedValue("人品指数", JsonValue.CreateNumberValue(392)); menbB2.SetNamedValue("是否砖家", JsonValue.CreateBooleanValue(true)); JsonObject menbB3 = new JsonObject(); menbB3.SetNamedValue("姓名", JsonValue.CreateStringValue("老袁")); menbB3.SetNamedValue("人品指数", JsonValue.CreateNumberValue(65)); menbB3.SetNamedValue("是否砖家", JsonValue.CreateBooleanValue(false)); JsonArray arr2 = new JsonArray(); arr2.Add(menbB1); arr2.Add(menbB2); arr2.Add(menbB3); // 第二团队信息 JsonObject teamB = new JsonObject(); teamB.SetNamedValue("团队名称", JsonValue.CreateStringValue("牛B二队")); teamB.SetNamedValue("成员列表", arr2); // 将两个团队的信息放到一个数组中 JsonArray teams = new JsonArray(); teams.Add(teamA); teams.Add(teamB); // 将以上JSON对象转换为字符串 this.txtJson.Text = teams.Stringify(); }
上面代码演示两个牛B团队的基本信息,而每个团队中又包含各自的成员信息。
结果就像下图所示:
是不是觉得这种生成JSON的方法有些复杂有点痛苦呢? 勿急,下一篇博文,我们将玩一些简单的东东。
相关文章推荐
- 新时尚Windows8开发(32):Json数据处理(A)
- 新时尚Windows8开发(33):Json数据处理(B)
- 新时尚Windows8开发(33):Json数据处理(B)
- 新时尚Windows8开发(27):根据应用程序的视图状态调整UI
- 新时尚Windows8开发(15):扩展联系人选择器
- 新时尚Windows8开发(18):制作类似单行簿的输入控件
- 新时尚Windows8开发(11):共享目标示例
- 新时尚Windows8开发(19):为应用程序定义“设置”面板
- 新时尚Windows8开发(34):多媒体文件转码
- 实际开发中,后台回传的错误格式的Json数据处理
- 新时尚Windows8开发(10):如何共享文本内容
- 新时尚Windows8开发:那些关于按钮的事
- 新时尚Windows8开发:ListBox与ComboBox
- 新时尚Windows8开发(35):后台传输
- 新时尚Windows8开发(36):Play To的一些事情
- 新时尚Windows8开发(9):加密和解密数据
- 新时尚Windows8开发(20):FlipView控件
- 新时尚Windows8开发(5):消息框
- 新时尚Windows8开发(24):文本呈现中的奥秘
- 新时尚Windows8开发(16):如何处理溢出文本