C# 从 ipdata.co 处理 JSON
C# process JSON from ipdata.co
我对 C# 有点陌生,希望有人能帮助我理解我需要做什么。
以下示例是 ipdata.co 文档网站推荐的 C# 代码。
using RestSharp; (at the top of the file)
var client = new RestClient("https://api.ipdata.co/?api-key=test");
var request = new RestRequest(Method.GET);
IRestResponse response = client.Execute(request);
我的 api 键有效。我可以进行手动查询并获得回复。现在我试图从上面示例代码中名为 "response" 的变量中解析 JSON 数据,这就是我迷路的地方。
我正在从 CSV 文件中提取 IP 和域名
提交到ipdata.co并在return中获取JSON文件
示例代码来自ipdata.co网站。除了它显示的内容外,我不确定如何处理以 JSON 格式编辑的 return 数据并提取我选择的特定元素,然后将结果写入磁盘。
Google 搜索让我更加困惑,所以我希望在这里得到帮助。
我有包含 IP 和域名的 CSV 文件。我将批量查询以获得 lat/long 和许多其他变量。我要解析并保存到磁盘的结果。这就是我迷路的地方,我希望有人不仅为我编写代码,而且帮助我理解为什么我需要按照建议去做。
这是使用 Google 的 8.8.8.8 地址时得到 returned 的 JSON 文件。
{
"ip": "8.8.8.8",
"is_eu": false,
"city": null,
"region": null,
"region_code": null,
"country_name": "United States",
"country_code": "US",
"continent_name": "North America",
"continent_code": "NA",
"latitude": 37.751,
"longitude": -97.822,
"postal": null,
"calling_code": "1",
"flag": "https://ipdata.co/flags/us.png",
"emoji_flag": "\ud83c\uddfa\ud83c\uddf8",
"emoji_unicode": "U+1F1FA U+1F1F8",
"asn": {
"asn": "AS15169",
"name": "Google LLC",
"domain": "google.com",
"route": "8.8.8.0/24",
"type": "hosting"
},
"languages": [
{
"name": "English",
"native": "English"
}
],
"currency": {
"name": "US Dollar",
"code": "USD",
"symbol": "$",
"native": "$",
"plural": "US dollars"
},
"time_zone": {
"name": "America/Chicago",
"abbr": "CST",
"offset": "-0600",
"is_dst": false,
"current_time": "2020-01-13T21:03:24.060857-06:00"
},
"threat": {
"is_tor": false,
"is_proxy": false,
"is_anonymous": false,
"is_known_attacker": false,
"is_known_abuser": true,
"is_threat": true,
"is_bogon": false
},
"count": "1"
}
如果出于某种原因不清楚我在问什么,请告诉我我缺少什么,我会非常乐意补充 it.I 我很喜欢学习 C#,但同时它也有很多去学习,我一直在学习我不知道的东西。
提前致谢。
要获取您要查找的数据,您首先需要反序列化 response.Content。
当您调用 Rest 端点时,您可以通过几种不同的方式调用它,
var response = client.Execute(request); // 1
var response = client.Execute<YourClass>(request); // 2
当您使用第一种方法时,您会收到包含状态和内容的响应。你想使用状态 (200) 来确认调用成功,然后你想使用内容来获取你需要的信息。
如果您使用第一种方法调用端点,则需要反序列化内容。
var obj = JObject.Parse(response.Content);
现在您有了 obj,您可以使用方括号访问任何数据以访问值。从你的代码来看,它会是这样的,
Console.WriteLine(obj["ip"].ToString()); // Prints 8.8.8.8
Console.WriteLine(obj["time_zone"]["name"].ToString()); // Prints America/New_York
您可以像这样访问其他数据。
其他方法
如果您在调用 API 时选择使用 class (client.Execute<MyClass>(request)
),则不需要反序列化。您将 response.Data 作为一个对象,您可以使用它来访问 JSON.
中的属性
Console.WriteLine(response.Data.ip); // Prints 8.8.8.8
Console.WriteLine(response.Data.time_zone.name); // Prints America/New_York
希望这清楚了如何从 API 调用中获取数据。
旁注
您可以使用 json2csharp.com 等在线站点将您的 json 转换为可用于反序列化您的响应的 C# 类。
首先谢谢你
我仍在尝试使用您发布的一些代码。
这成功了,没有你的帮助我无法完成。
using System;
//Add
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using Newtonsoft.Json;
using System.Globalization;
using IpData;
using RestSharp;
namespace ipdata_co_v1
{
class Program
{
public static void Main()
{
var client = new
RestClient("https://api.ipdata.co/8.8.8.8?api-key=test");
var request = new RestRequest(Method.GET);
//IRestResponse response = client.Execute(request);
//To get the data you are looking for, you will
first need to deserialize the response.Content.
//When you call the Rest endpoint, you can call it
in a few different ways.
//var response = client.Execute(request);
// 1
var response = client.Execute<IPData>(request); // 2
//var obj =
JsonConvert.DeserializeObject(response.Content);
//Console.WriteLine(obj["ip"].Value);
Console.WriteLine(response.Data.ip);
Console.WriteLine(response.Data.latitude);
Console.WriteLine(response.Data.longitude);
}
public class IPData
{
public string ip { get; set; }
public string city { get; set; }
public string country_name { get; set; }
public string country_code { get; set; }
public string continent_name { get; set; }
public string continent_code { get; set; }
public string latitude { get; set; }
public string longitude { get; set; }
public string flag { get; set; }
public string time_zone { get; set; }
}
}
}
它起作用了 -
一旦我对此进行了更多练习,我很乐意提出更多问题。先练几天
我对 C# 有点陌生,希望有人能帮助我理解我需要做什么。
以下示例是 ipdata.co 文档网站推荐的 C# 代码。
using RestSharp; (at the top of the file)
var client = new RestClient("https://api.ipdata.co/?api-key=test");
var request = new RestRequest(Method.GET);
IRestResponse response = client.Execute(request);
我的 api 键有效。我可以进行手动查询并获得回复。现在我试图从上面示例代码中名为 "response" 的变量中解析 JSON 数据,这就是我迷路的地方。
我正在从 CSV 文件中提取 IP 和域名
提交到ipdata.co并在return中获取JSON文件
示例代码来自ipdata.co网站。除了它显示的内容外,我不确定如何处理以 JSON 格式编辑的 return 数据并提取我选择的特定元素,然后将结果写入磁盘。
Google 搜索让我更加困惑,所以我希望在这里得到帮助。
我有包含 IP 和域名的 CSV 文件。我将批量查询以获得 lat/long 和许多其他变量。我要解析并保存到磁盘的结果。这就是我迷路的地方,我希望有人不仅为我编写代码,而且帮助我理解为什么我需要按照建议去做。
这是使用 Google 的 8.8.8.8 地址时得到 returned 的 JSON 文件。
{
"ip": "8.8.8.8",
"is_eu": false,
"city": null,
"region": null,
"region_code": null,
"country_name": "United States",
"country_code": "US",
"continent_name": "North America",
"continent_code": "NA",
"latitude": 37.751,
"longitude": -97.822,
"postal": null,
"calling_code": "1",
"flag": "https://ipdata.co/flags/us.png",
"emoji_flag": "\ud83c\uddfa\ud83c\uddf8",
"emoji_unicode": "U+1F1FA U+1F1F8",
"asn": {
"asn": "AS15169",
"name": "Google LLC",
"domain": "google.com",
"route": "8.8.8.0/24",
"type": "hosting"
},
"languages": [
{
"name": "English",
"native": "English"
}
],
"currency": {
"name": "US Dollar",
"code": "USD",
"symbol": "$",
"native": "$",
"plural": "US dollars"
},
"time_zone": {
"name": "America/Chicago",
"abbr": "CST",
"offset": "-0600",
"is_dst": false,
"current_time": "2020-01-13T21:03:24.060857-06:00"
},
"threat": {
"is_tor": false,
"is_proxy": false,
"is_anonymous": false,
"is_known_attacker": false,
"is_known_abuser": true,
"is_threat": true,
"is_bogon": false
},
"count": "1"
}
如果出于某种原因不清楚我在问什么,请告诉我我缺少什么,我会非常乐意补充 it.I 我很喜欢学习 C#,但同时它也有很多去学习,我一直在学习我不知道的东西。
提前致谢。
要获取您要查找的数据,您首先需要反序列化 response.Content。
当您调用 Rest 端点时,您可以通过几种不同的方式调用它,
var response = client.Execute(request); // 1
var response = client.Execute<YourClass>(request); // 2
当您使用第一种方法时,您会收到包含状态和内容的响应。你想使用状态 (200) 来确认调用成功,然后你想使用内容来获取你需要的信息。
如果您使用第一种方法调用端点,则需要反序列化内容。
var obj = JObject.Parse(response.Content);
现在您有了 obj,您可以使用方括号访问任何数据以访问值。从你的代码来看,它会是这样的,
Console.WriteLine(obj["ip"].ToString()); // Prints 8.8.8.8
Console.WriteLine(obj["time_zone"]["name"].ToString()); // Prints America/New_York
您可以像这样访问其他数据。
其他方法
如果您在调用 API 时选择使用 class (client.Execute<MyClass>(request)
),则不需要反序列化。您将 response.Data 作为一个对象,您可以使用它来访问 JSON.
Console.WriteLine(response.Data.ip); // Prints 8.8.8.8
Console.WriteLine(response.Data.time_zone.name); // Prints America/New_York
希望这清楚了如何从 API 调用中获取数据。
旁注
您可以使用 json2csharp.com 等在线站点将您的 json 转换为可用于反序列化您的响应的 C# 类。
首先谢谢你 我仍在尝试使用您发布的一些代码。
这成功了,没有你的帮助我无法完成。
using System;
//Add
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using Newtonsoft.Json;
using System.Globalization;
using IpData;
using RestSharp;
namespace ipdata_co_v1
{
class Program
{
public static void Main()
{
var client = new
RestClient("https://api.ipdata.co/8.8.8.8?api-key=test");
var request = new RestRequest(Method.GET);
//IRestResponse response = client.Execute(request);
//To get the data you are looking for, you will
first need to deserialize the response.Content.
//When you call the Rest endpoint, you can call it
in a few different ways.
//var response = client.Execute(request);
// 1
var response = client.Execute<IPData>(request); // 2
//var obj =
JsonConvert.DeserializeObject(response.Content);
//Console.WriteLine(obj["ip"].Value);
Console.WriteLine(response.Data.ip);
Console.WriteLine(response.Data.latitude);
Console.WriteLine(response.Data.longitude);
}
public class IPData
{
public string ip { get; set; }
public string city { get; set; }
public string country_name { get; set; }
public string country_code { get; set; }
public string continent_name { get; set; }
public string continent_code { get; set; }
public string latitude { get; set; }
public string longitude { get; set; }
public string flag { get; set; }
public string time_zone { get; set; }
}
}
}
它起作用了 - 一旦我对此进行了更多练习,我很乐意提出更多问题。先练几天