使用 JavaScript 对象表示法 (JSON)(使用 C++、C# 或 Visual Basic 的 Windows 运行时应用)

用途

使用 Windows.Data.Json 命名空间中的功能分析来自 JavaScript 对象表示法 (JSON) 文本的值、字符串、对象和数组,或者将值类型序列化成 JSON 文本。

JSON 是一种开放的、基于文本的数据交换格式(请参阅 RFC 4627)。它不依赖于任何平台,并可享受到实现的广泛可用性。根据 JSON 标准进行格式化的数据都是轻型的,并可非常容易地通过 JavaScript 实现进行解析。因为它主要是一种数据格式,所以当应用程序需要以文本形式对结构化信息进行交换或存储时,JSON 几乎可在任何此类方案中使用。

以下功能可用于 Windows 运行时应用,以从 HTTP 服务器检索包含 JSON 的文本,或者将包含 JSON 的文本发送到 HTTP 服务器。

Parsing JSON and serializing data into JSON

以下各节将演示如何为数字、字符串、对象和数组值解析 JSON 文本并将其声明为可管理的对象,或者接收值并将其转换为对象和序列化为 JSON。

Objects

将来自 JSON 文本的对象反序列化为 JsonObject 并检索它所包含的已命名的值。


JsonValue jsonValue = JsonValue.Parse("{\"Width\": 800, \"Height\": 600, \"Title\": \"View from 15th Floor\", \"IDs\": [116, 943, 234, 38793]}");
double width = jsonValue.GetObject().GetNamedNumber("Width");
double height = jsonValue.GetObject().GetNamedNumber("Height");
string title = jsonValue.GetObject().GetNamedString("Title");
JsonArray ids = jsonValue.GetObject().GetNamedArray("IDs");


创建一个新的 JsonObject,并使用 JsonObject::Insert 方法用新的名称/JsonValue 对来填充它。完成后,即可调用 JsonObject::Stringify 以将 JsonObject 序列化为 JSON 文本。


JsonObject jsonObject = new JsonObject();
jsonObject["Width"] = JsonValue.CreateNumberValue(800);
jsonObject["Height"] = JsonValue.CreateNumberValue(600);
jsonObject["Title"] = JsonValue.CreateStringValue("View from 15th Floor");
jsonObject["IDs"] = JsonValue.Parse("[116, 943, 234, 38793]");
string jsonString = jsonObject.Stringify();


Arrays

将来自 JSON 文本的数组反序列化为 JsonArray 并检索它所包含的已索引的值。


JsonValue jsonValue = JsonValue.Parse("[116, 3.14159, true, \"abc\"]");
double element1 = jsonValue.GetArray().GetNumberAt(0);
double element2 = jsonValue.GetArray().GetNumberAt(1);
bool element3 = jsonValue.GetArray().GetBooleanAt(2);
string element4 = jsonValue.GetArray().GetStringAt(3);


另外,还可以使用 GetAt 方法对 JsonArray 中所包含的值进行检索。在下面的示例中,每个已索引的值都通过 switch case 语句来运行,在每一个 JsonValue 中所表示的 ValueType 属性决定了用于检索值的具体方法。


JsonValue jsonValue = JsonValue.Parse("[116, 3.14159, true, \"abc\"]");
int arraySize = jsonValue.GetArray().Count;
for (int i = 0; i < arraySize; i++)
{
    IJsonValue element = jsonValue.GetArray()[i];
    switch (element.ValueType)
    {
       case JsonValueType.Number:
           double numberValue = element.GetNumber();
           break;
       // ...
    }
}


创建一个新的 JsonArray,并使用 JsonArray::Append 方法用 JsonValue 对象来填充它。完成后,即可调用 JsonArray::Stringify 以将 JsonArray 序列化为 JSON 文本。


JsonArray jsonArray = new JsonArray();
jsonArray.Add(JsonValue.CreateNumberValue(116));
jsonArray.Add(JsonValue.CreateNumberValue(3.14159));
jsonArray.Add(JsonValue.CreateBooleanValue(true));
jsonArray.Add(JsonValue.CreateStringValue("abc"));
string jsonString = jsonArray.Stringify();


Numbers

解析来自 JSON 文本的数字值,并使用 JsonValue::GetNumber 从所生成的 JsonValue 中检索数字。



JsonValue jsonValue = JsonValue.Parse("5");
double numberValue = jsonValue.GetNumber();


要将数字值序列化为 JSON文本,请使用 JsonValue::CreateNumberValue 创建一个新的 JsonValue 并分配所需的值。


JsonValue jsonValue = JsonValue.CreateNumberValue(5);
string jsonString = jsonValue.Stringify();


Strings

解析来自 JSON 文本的字符串值,并使用 JsonValue::GetString 从所生成的 JsonValue 中检索字符串。


JsonValue jsonValue = JsonValue.Parse("\"test string\"");
string stringValue = jsonValue.GetString();


要将字符串值序列化为 JSON文本,请使用 JsonValue::CreateStringValue 创建一个新的 JsonValue 并分配所需的值。


JsonValue jsonValue = JsonValue.CreateStringValue("test string");
string jsonString = jsonValue.Stringify();


相关主题

其他资源
分析 Windows 运行时组件中的 JSON 字符串
参考
C++ REST SDK
JsonArray
JsonObject
JsonValue
Windows.Data.Json
Windows.Web.Http
Windows.Web.Http.HttpClient
XML HTTP 扩展请求 (IXMLHttpRequest2)
示例
JSON 示例

 

 

显示:
© 2015 Microsoft