gpt4 book ai didi

c# - 使用 JSON.NET 读取 Foursquare Json 响应

转载 作者:行者123 更新时间:2023-11-30 15:40:13 26 4
gpt4 key购买 nike

我正在尝试访问 Foursquare 响应中第一级中的所有类别:-

{
"meta": {
"code": 200
},
"response": {
"categories": [{
"id": "4d4b7104d754a06370d81259",
"name": "Arts & Entertainment",
"pluralName": "Arts & Entertainment",
"shortName": "Arts & Entertainment",
"icon": {
"prefix": "https:\/\/foursquare.com\/img\/categories\/arts_entertainment\/default_",
"sizes": [32, 44, 64, 88, 256],
"name": ".png"
},
"categories": [{
"id": "4bf58dd8d48988d1e1931735"

使用 JSON.NET:-

JObject o = JObject.Parse(FoursquareObject.GetCategories());
IList<string> categories = o.SelectToken("categories[0]").Select(s => (string)s).ToList();

其中 FoursquareObject.GetCategories() 以字符串形式返回响应。我也试过:-

JArray categories = (JArray)o["categories"];

var categories = (string) o["response[0].categories"];

...以及众多变体,只是为了查看变量中的响应,并且总是出现“对象引用”或“不能为 {null}”错误。我知道我很接近,但我终究无法弄清楚如何获得响应的“类别”部分......

谁能指出我正确的方向?

感谢您的帮助。 ;)

更新:

感谢 L.B 和 Meklarian 的回答,我添加了这段代码(及其变体):-

dynamic four = JsonConvert.DeserializeObject(FoursquareObject.GetCategories());
foreach (var cat in four)
{
context.Response.Write(cat.response.categories.id);
}

但是无论我在 Write() 中尝试什么,我总是得到:-

'Newtonsoft.Json.Linq.JProperty' does not contain a definition for 'response'

我尝试了很多组合,但没有成功。我检查了 JSON 文件的输出,我得到了一个字符串形式的纯 JSON 响应。请注意,类别可以存在于类别中,因此 JSON 看起来很破损。我向你保证不是。我完全卡住了!

最佳答案

有多种方法可以解析它;但按照您最初呈现的样式,您应该尝试使用 [] 索引器访问它。

请注意,您的数据有一个具有两个属性的根对象,metaresponse。假设 response 不能为 null,您可以像这样直接从它访问 categories:

var root = JObject.Parse(/* your json string here */);
var categories = root["response"]["categories"];
var firstCategory = categories[0];

请注意,您可以使用与属性名称匹配的字符串下降到嵌套级别,并使用整数索引到范围内的数组。

这是一个示例程序的其余部分,可以解析您提供的 json 片段。

using System.Windows.Forms;

using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json.Serialization;

namespace _4sqCatResponse
{
class Program
{
[STAThread]
static void Main(string[] args)
{
OpenFileDialog dlg = new OpenFileDialog();
if(dlg.ShowDialog() != DialogResult.OK){return;}
string json = System.IO.File.ReadAllText(dlg.FileName);

var root = JObject.Parse(json);
var categories = root["response"]["categories"];
var firstCategory = categories[0];
Console.WriteLine("id: {0}", firstCategory["id"]);
Console.WriteLine("name: {0}", firstCategory["name"]);
Console.WriteLine("pluralName: {0}", firstCategory["pluralName"]);
Console.WriteLine("shortName: {0}", firstCategory["shortName"]);
var icon = firstCategory["icon"];
Console.WriteLine("icon.prefix: {0}", icon["prefix"]);
Console.WriteLine("icon.sizes[0]: {0}", icon["sizes"][0]);
Console.WriteLine("icon.name: {0}", icon["name"]);

Console.ReadKey();
}
}
}

此外,您的 json 示例让我有些困惑;我认为您可能已经覆盖了部分样本或删除了一些内容,因为您的类别嵌套在类别中。如果您的类别元素中确实有二级类别并且这就是您想要的,您可以通过以下方式访问它:

var categories2 = root["response"]["categories"][0]["categories"][0];
Console.WriteLine("inner categories id: {0}", categories2["id"]);

这是我用来测试的 json 源代码,从你的源代码中复制过来,但在需要解析的地方用 }] 标记结束。

{
"meta": {
"code": 200
},
"response": {
"categories": [{
"id": "4d4b7104d754a06370d81259",
"name": "Arts & Entertainment",
"pluralName": "Arts & Entertainment",
"shortName": "Arts & Entertainment",
"icon": {
"prefix": "https:\/\/foursquare.com\/img\/categories\/arts_entertainment\/default_",
"sizes": [32, 44, 64, 88, 256],
"name": ".png"
},
"categories": [{
"id": "4bf58dd8d48988d1e1931735"
}]
}]
}
}

关于c# - 使用 JSON.NET 读取 Foursquare Json 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9525096/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com