新时尚Windows8开发(32):Json数据处理(A)
2013-01-16 10:13
411 查看
SON是啥?大家不陌生了吧,估计有人比我还懂,这玩意儿其实我只懂点皮毛,对,就是皮毛,皮和毛,皮包着毛,你看看JSON对象是不是这样?
外面套着一对大括号({})是皮,里面有很多毛毛,其实一个JSON对象就好像一个字典集合,有key,也有value,当然,也可以没有key。你看,一个标准的JSON对象大概是这样的。
{
'键名' : 键值,
'键名' : 键值,
'键名' : 键值
}
如果是集合,如数组之类的,就多个对象放在 [ ...] 中,用逗号隔开,记得是英文的逗号。
这个例子,我们来“调研”一下,如何从一个JSON结构的字符串生成一个JSON对象。
1、新建一个空白页面的“板砖”风格应用。
2、主页的布局就直接Ctrl + V XAML代码了,不然又有人说:“这和Win8有毛关系啊,这不是WPF中的XAML吗?”
[html] view
plaincopyprint?
<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事件,我贴个完整的。
[csharp] view
plaincopyprint?
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 —— 这些方法就简单了,都是取出单个指定类型的值。
现在运行一下,点击页面最上方的按钮,就会看到结果了。
本个例子貌似和上面的例子相反,是将JSON对象变成字符串表示形式。
1、新建应用程序项目。
2、MainPage.xaml的UI如下:
[html] view
plaincopyprint?
<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命名空间。
[csharp] view
plaincopyprint?
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的方法有些复杂有点痛苦呢? 勿急,下一篇博文,我们将玩一些简单的东东。
转载:http://blog.csdn.net/tcjiaan/article/details/8181482
外面套着一对大括号({})是皮,里面有很多毛毛,其实一个JSON对象就好像一个字典集合,有key,也有value,当然,也可以没有key。你看,一个标准的JSON对象大概是这样的。
{
'键名' : 键值,
'键名' : 键值,
'键名' : 键值
}
如果是集合,如数组之类的,就多个对象放在 [ ...] 中,用逗号隔开,记得是英文的逗号。
案例1:从JSON字符串产生JSON对象
这个例子,我们来“调研”一下,如何从一个JSON结构的字符串生成一个JSON对象。1、新建一个空白页面的“板砖”风格应用。
2、主页的布局就直接Ctrl + V XAML代码了,不然又有人说:“这和Win8有毛关系啊,这不是WPF中的XAML吗?”
[html] view
plaincopyprint?
<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事件,我贴个完整的。
[csharp] view
plaincopyprint?
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如下:
[html] view
plaincopyprint?
<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命名空间。
[csharp] view
plaincopyprint?
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的方法有些复杂有点痛苦呢? 勿急,下一篇博文,我们将玩一些简单的东东。
转载:http://blog.csdn.net/tcjiaan/article/details/8181482
相关文章推荐
- 新时尚Windows8开发(32):Json数据处理(A)
- 新时尚Windows8开发(33):Json数据处理(B)
- 新时尚Windows8开发(33):Json数据处理(B)
- 新时尚Windows8开发(17):自己也来做一做弹出对话框
- 新时尚Windows8开发(4):保存/读取本地应用程序设置
- 新时尚Windows8开发(23):那些关于按钮的事
- 新时尚Windows8开发(25):缩放视图
- 新时尚Windows8开发(39):文件的Read和Write
- 新时尚Windows8开发(12):如何选择并打开文件
- 新时尚Windows8开发(26):后台播放Musics
- 新时尚Windows8开发(13):如何选择保存文件
- 新时尚Windows8开发(28):多媒体捕捉(低级篇)
- 【多端应用开发系列1.1.1 —— Android:使用新浪API V2】服务器Json数据处理——Json数据概述
- 新时尚Windows8开发(30):集成“搜索”功能
- 新时尚Windows8开发(2):应用程序生命周期
- 新时尚Windows8开发(3):应用程序状态
- 新时尚Windows8开发(31):去掉文本中的HTML标记
- 新时尚Windows8开发(38):聊天程序
- 新时尚Windows8开发(11):共享目标示例
- 新时尚Windows8开发(27):根据应用程序的视图状态调整UI