我已阅读了数十篇文章,教程和答案,但它并没有为我点击。我是API和JSON的新手,初学者到中级.NET技能。我需要从Survey API检索数据并将其转储到MySQL数据库中。获取数据没有问题,但一旦得到它,我不知道如何处理它。我知道我必须循环使用JSON,但我似乎无法到达那里。有人请向我解释如何深入研究结果并挑选出每个数据点吗?我可以从中找出如何将其转储到数据库中。我已更新我的代码以反映我最近的努力。 以下是我使用QuickType.io创建的类:
namespace QuickType
{
using System;
using System.Net;
using System.Collections.Generic;
using Newtonsoft.Json;
using J = Newtonsoft.Json.JsonPropertyAttribute;
public partial class Survey
{
[J("result_ok")] public bool ResultOk { get; set; }
[J("total_count")] public string TotalCount { get; set; }
[J("page")] public long Page { get; set; }
[J("total_pages")] public long TotalPages { get; set; }
[J("results_per_page")] public long ResultsPerPage { get; set; }
[J("data")] public Datum[] Data { get; set; }
}
public partial class Datum
{
[J("id")] public string Id { get; set; }
[J("contact_id")] public string ContactId { get; set; }
[J("status")] public string Status { get; set; }
[J("is_test_data")] public string IsTestData { get; set; }
[J("datesubmitted")] public DateTime Datesubmitted { get; set; }
[J("SessionID")] public string SessionId { get; set; }
[J("Language")] public string Language { get; set; }
[J("datestarted")] public DateTime Datestarted { get; set; }
[J("iLinkID")] public string ILinkId { get; set; }
[J("sResponseComment")] public string SResponseComment { get; set; }
[J("responseID")] public string ResponseId { get; set; }
[J("[question(5)]")] public string Question5 { get; set; }
[J("[question(7)]")] public string Question7 { get; set; }
[J("[question(11)]")] public string Question11 { get; set; }
[J("[question(12)]")] public string Question12 { get; set; }
[J("[question(13)]")] public string Question13 { get; set; }
[J("[question(15)]")] public string Question15 { get; set; }
[J("[question(17)]")] public string Question17 { get; set; }
[J("[question(27)]")] public string Question27 { get; set; }
[J("[question(29)]")] public string Question29 { get; set; }
[J("[question(35)]")] public string Question35 { get; set; }
[J("[question(36)]")] public string Question36 { get; set; }
[J("[question(42)]")] public string Question42 { get; set; }
[J("[question(43)]")] public string Question43 { get; set; }
[J("[question(44)]")] public string Question44 { get; set; }
[J("[question(46)]")] public string Question46 { get; set; }
[J("[question(51)]")] public string Question51 { get; set; }
[J("[question(53)]")] public string Question53 { get; set; }
[J("[question(55)]")] public string Question55 { get; set; }
[J("[question(57)]")] public string Question57 { get; set; }
[J("[question(91)]")] public string Question91 { get; set; }
[J("[question(94)]")] public string Question94 { get; set; }
[J("[question(97)]")] public string Question97 { get; set; }
[J("[question(98)]")] public string Question98 { get; set; }
[J("[question(99)]")] public string Question99 { get; set; }
[J("[question(100)]")] public string Question100 { get; set; }
[J("[question(102)]")] public string Question102 { get; set; }
[J("[question(105)]")] public string Question105 { get; set; }
[J("[question(106)]")] public string Question106 { get; set; }
[J("[question(109)]")] public string Question109 { get; set; }
[J("[question(110)]")] public string Question110 { get; set; }
[J("[question(111)]")] public string Question111 { get; set; }
[J("[question(112)]")] public string Question112 { get; set; }
[J("[question(113)]")] public string Question113 { get; set; }
[J("[question(114)]")] public string Question114 { get; set; }
[J("[question(115)]")] public string Question115 { get; set; }
[J("[question(116)]")] public string Question116 { get; set; }
[J("[question(117)]")] public string Question117 { get; set; }
[J("[variable(\"STANDARD_IP\")]")] public string VariableStandardIp
{ get; set; }
[J("[variable(\"STANDARD_LONG\")]")] public string VariableStandardLong { get; set; }
[J("[variable(\"STANDARD_LAT\")]")] public string VariableStandardLat { get; set; }
[J("[variable(\"STANDARD_GEOCOUNTRY\")]")] public string VariableStandardGeocountry { get; set; }
[J("[variable(\"STANDARD_GEOCITY\")]")] public string VariableStandardGeocity { get; set; }
[J("[variable(\"STANDARD_GEOREGION\")]")] public string VariableStandardGeoregion { get; set; }
[J("[variable(\"STANDARD_GEOPOSTAL\")]")] public string VariableStandardGeopostal { get; set; }
[J("[variable(\"STANDARD_RESPONSETIME\")]")] public string VariableStandardResponsetime { get; set; }
[J("[variable(\"STANDARD_COMMENTS\")]")] public string VariableStandardComments { get; set; }
[J("[variable(\"STANDARD_DEVICE\")]")] public string VariableStandardDevice { get; set; }
[J("[variable(\"STANDARD_DATAQUALITYCOUNTER\")]")] public string VariableStandardDataqualitycounter { get; set; }
[J("[variable(\"STANDARD_CHECKBOXONE_COUNT\")]")] public string VariableStandardCheckboxoneCount { get; set; }
[J("[variable(\"STANDARD_CHECKBOXONE\")]")] public string VariableStandardCheckboxone { get; set; }
[J("[variable(\"STANDARD_STRAIGHTLINING_COUNT\")]")] public string VariableStandardStraightliningCount { get; set; }
[J("[variable(\"STANDARD_STRAIGHTLINING\")]")] public string VariableStandardStraightlining { get; set; }
[J("[variable(\"STANDARD_OPENTEXTGIBBERISH_COUNT\")]")] public string VariableStandardOpentextgibberishCount { get; set; }
[J("[variable(\"STANDARD_OPENTEXTGIBBERISH\")]")] public string VariableStandardOpentextgibberish { get; set; }
[J("[variable(\"STANDARD_OPENTEXTBADWORDS_COUNT\")]")] public string VariableStandardOpentextbadwordsCount { get; set; }
[J("[variable(\"STANDARD_OPENTEXTBADWORDS\")]")] public string VariableStandardOpentextbadwords { get; set; }
[J("[variable(\"STANDARD_OPENTEXTONEWORDREQUIREDESSAY_COUNT\")]")] public string VariableStandardOpentextonewordrequiredessayCount { get; set; }
[J("[variable(\"STANDARD_OPENTEXTONEWORDREQUIREDESSAY\")]")] public string VariableStandardOpentextonewordrequiredessay { get; set; }
[J("[variable(\"STANDARD_CHECKBOXALL_COUNT\")]")] public string VariableStandardCheckboxallCount { get; set; }
[J("[variable(\"STANDARD_CHECKBOXALL\")]")] public string VariableStandardCheckboxall { get; set; }
[J("[variable(\"STANDARD_AVGQUESTSECONDS\")]")] public string VariableStandardAvgquestseconds { get; set; }
[J("[variable(\"STANDARD_FINGERPRINT\")]")] public string VariableStandardFingerprint { get; set; }
[J("[variable(\"STANDARD_GEODMA\")]")] public string VariableStandardGeodma { get; set; }
[J("[variable(\"STANDARD_REFERER\")]")] public string VariableStandardReferer { get; set; }
[J("[variable(\"STANDARD_USERAGENT\")]")] public string VariableStandardUseragent { get; set; }
[J("[variable(\"PORTAL_RELATIONSHIP\")]")] public string VariablePortalRelationship { get; set; }
[J("[variable(\"1-shown\")]")] public string Variable1Shown { get; set; }
[J("[variable(\"4-shown\")]")] public string Variable4Shown { get; set; }
[J("[variable(\"5-shown\")]")] public string Variable5Shown { get; set; }
[J("[variable(5)]")] public string Variable5 { get; set; }
[J("[variable(\"7-shown\")]")] public string Variable7Shown { get; set; }
[J("[variable(\"11-shown\")]")] public string Variable11Shown { get; set; }
[J("[variable(11)]")] public string Variable11 { get; set; }
[J("[variable(\"13-shown\")]")] public string Variable13Shown { get; set; }
[J("[variable(13)]")] public string Variable13 { get; set; }
[J("[variable(\"14-shown\")]")] public string Variable14Shown { get; set; }
[J("[variable(\"15-shown\")]")] public string Variable15Shown { get; set; }
[J("[variable(15)]")] public string Variable15 { get; set; }
[J("[variable(\"17-shown\")]")] public string Variable17Shown { get; set; }
[J("[variable(27)]")] public string Variable27 { get; set; }
[J("[variable(\"27-shown\")]")] public string Variable27Shown { get; set; }
[J("[variable(29)]")] public string Variable29 { get; set; }
[J("[variable(\"29-shown\")]")] public string Variable29Shown { get; set; }
[J("[variable(\"34-shown\")]")] public string Variable34Shown { get; set; }
[J("[variable(35)]")] public string Variable35 { get; set; }
[J("[variable(\"35-shown\")]")] public string Variable35Shown { get; set; }
[J("[variable(36)]")] public string Variable36 { get; set; }
[J("[variable(\"36-shown\")]")] public string Variable36Shown { get; set; }
[J("[variable(\"42-shown\")]")] public string Variable42Shown { get; set; }
[J("[variable(42)]")] public string Variable42 { get; set; }
[J("[variable(\"44-shown\")]")] public string Variable44Shown { get; set; }
[J("[variable(\"46-shown\")]")] public string Variable46Shown { get; set; }
[J("[variable(46)]")] public string Variable46 { get; set; }
[J("[variable(\"51-shown\")]")] public string Variable51Shown { get; set; }
[J("[variable(51)]")] public string Variable51 { get; set; }
[J("[variable(53)]")] public string Variable53 { get; set; }
[J("[variable(\"53-shown\")]")] public string Variable53Shown { get; set; }
[J("[variable(\"55-shown\")]")] public string Variable55Shown { get; set; }
[J("[variable(\"56-shown\")]")] public string Variable56Shown { get; set; }
[J("[variable(\"57-shown\")]")] public string Variable57Shown { get; set; }
[J("[variable(\"91-shown\")]")] public string Variable91Shown { get; set; }
[J("[variable(91)]")] public string Variable91 { get; set; }
[J("[variable(\"93-shown\")]")] public string Variable93Shown { get; set; }
[J("[variable(\"94-shown\")]")] public string Variable94Shown { get; set; }
[J("[variable(\"97-shown\")]")] public string Variable97Shown { get; set; }
[J("[variable(\"98-shown\")]")] public string Variable98Shown { get; set; }
[J("[variable(\"99-shown\")]")] public string Variable99Shown { get; set; }
[J("[variable(\"100-shown\")]")] public string Variable100Shown { get; set; }
[J("[variable(\"101-shown\")]")] public string Variable101Shown { get; set; }
[J("[variable(\"102-shown\")]")] public string Variable102Shown { get; set; }
[J("[variable(102)]")] public string Variable102 { get; set; }
[J("[variable(\"105-shown\")]")] public string Variable105Shown { get; set; }
[J("[variable(105)]")] public string Variable105 { get; set; }
[J("[variable(\"106-shown\")]")] public string Variable106Shown { get; set; }
[J("[variable(106)]")] public string Variable106 { get; set; }
[J("[variable(\"108-shown\")]")] public string Variable108Shown { get; set; }
[J("[variable(109)]")] public string Variable109 { get; set; }
[J("[variable(\"109-shown\")]")] public string Variable109Shown { get; set; }
[J("[variable(110)]")] public string Variable110 { get; set; }
[J("[variable(\"110-shown\")]")] public string Variable110Shown { get; set; }
[J("[variable(111)]")] public string Variable111 { get; set; }
[J("[variable(\"111-shown\")]")] public string Variable111Shown { get; set; }
[J("[variable(112)]")] public string Variable112 { get; set; }
[J("[variable(\"112-shown\")]")] public string Variable112Shown { get; set; }
[J("[variable(113)]")] public string Variable113 { get; set; }
[J("[variable(\"113-shown\")]")] public string Variable113Shown { get; set; }
[J("[variable(114)]")] public string Variable114 { get; set; }
[J("[variable(\"114-shown\")]")] public string Variable114Shown { get; set; }
[J("[variable(115)]")] public string Variable115 { get; set; }
[J("[variable(\"115-shown\")]")] public string Variable115Shown { get; set; }
[J("[variable(116)]")] public string Variable116 { get; set; }
[J("[variable(\"116-shown\")]")] public string Variable116Shown { get; set; }
[J("[variable(117)]")] public string Variable117 { get; set; }
[J("[variable(\"117-shown\")]")] public string Variable117Shown { get; set; }
[J("[comment(5)]")] public string Comment5 { get; set; }
[J("[comment(11)]")] public string Comment11 { get; set; }
[J("[comment(13)]")] public string Comment13 { get; set; }
[J("[comment(15)]")] public string Comment15 { get; set; }
[J("[comment(27)]")] public string Comment27 { get; set; }
[J("[comment(29)]")] public string Comment29 { get; set; }
[J("[comment(35)]")] public string Comment35 { get; set; }
[J("[comment(36)]")] public string Comment36 { get; set; }
[J("[comment(42)]")] public string Comment42 { get; set; }
[J("[comment(46)]")] public string Comment46 { get; set; }
[J("[comment(51)]")] public string Comment51 { get; set; }
[J("[comment(53)]")] public string Comment53 { get; set; }
[J("[comment(102)]")] public string Comment102 { get; set; }
[J("[comment(105)]")] public string Comment105 { get; set; }
[J("[comment(106)]")] public string Comment106 { get; set; }
[J("[comment(109)]")] public string Comment109 { get; set; }
[J("[comment(110)]")] public string Comment110 { get; set; }
[J("[comment(111)]")] public string Comment111 { get; set; }
[J("[comment(112)]")] public string Comment112 { get; set; }
[J("[comment(113)]")] public string Comment113 { get; set; }
[J("[comment(114)]")] public string Comment114 { get; set; }
[J("[comment(115)]")] public string Comment115 { get; set; }
[J("[comment(116)]")] public string Comment116 { get; set; }
[J("[comment(117)]")] public string Comment117 { get; set; }
}
public partial class Survey
{
public static Survey FromJson(string json)
{
return JsonConvert.DeserializeObject<Survey>(json, Converter.Settings);
}
}
public partial class Datum
{
public static Datum FromJson(string json )
{
return JsonConvert.DeserializeObject<Datum>(json, Converter.Settings);
}
}
public static class Serialize
{
public static string ToJson(this Survey self)
{
return JsonConvert.SerializeObject(self, Converter.Settings);
}
}
public class Converter
{
public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
{
MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
DateParseHandling = DateParseHandling.None,
};
}
}
这里是要检索的数据的部分表示:
Array
(
[result_ok] => 1
[total_count] => 54
[page] => 1
[total_pages] => 1
[results_per_page] => 500
[data] => Array
(
[0] => Array
(
[id] => 8
[contact_id] =>
[status] => Complete
[is_test_data] => 0
[datesubmitted] => 2017-09-12 14:12:21
[SessionID] => 1505238728_59b81ec88b2337.99042127
[Language] => English
[datestarted] => 2017-09-12 14:08:05
[iLinkID] => 5730460
[sResponseComment] =>
[responseID] => 8
[[question(5)]] => Strongly agree
[[question(7)]] =>
[[question(11)]] => Strongly agree
[[question(12)]] =>
[[question(13)]] => 0
[[question(15)]] => Disagree
[[question(17)]] => There should be more clarity on the initial process. It seemed as if we were going in many directions at times. I would strongly recommend a daily checklist, that in the end, would be a reference guide to the daily operations after training is completed.
[[question(27)]] => 0
[[question(29)]] =>
[[question(35)]] => Prepared
[[question(36)]] => Prepared
[[question(42)]] =>
[[question(43)]] =>
[[question(44)]] =>
[[question(46)]] => About right
[[question(51)]] => A little fast
[[question(53)]] => 100
[[question(55)]] =>
[[question(57)]] => some text here
[[question(91)]] => Person's Name
[[question(94)]] => 2017/08/14
[[question(97)]] =>
[[question(98)]] =>
[[question(99)]] =>
[[question(100)]] =>
[[question(102)]] => About right
[[question(105)]] =>
[[question(106)]] =>
[[question(109)]] =>
[[question(110)]] =>
[[question(111)]] => Very Prepared
[[question(112)]] =>
[[question(113)]] =>
[[question(114)]] =>
[[question(115)]] => Strongly agree
[[question(116)]] =>
[[question(117)]] => 100
[[variable("STANDARD_IP")]] => 96.63.68.4
[[variable("STANDARD_LONG")]] => -86.784400939941
[[variable("STANDARD_LAT")]] => 36.165901184082
[[variable("STANDARD_GEOCOUNTRY")]] => United States
[[variable("STANDARD_GEOCITY")]] => Nashville
[[variable("STANDARD_GEOREGION")]] => TN
[[variable("STANDARD_GEOPOSTAL")]] => 37222
[[variable("STANDARD_RESPONSETIME")]] => 324
[[variable("STANDARD_COMMENTS")]] =>
[[variable("STANDARD_DEVICE")]] => Desktop
[[variable("STANDARD_DATAQUALITYCOUNTER")]] =>
[[variable("STANDARD_CHECKBOXONE_COUNT")]] =>
[[variable("STANDARD_CHECKBOXONE")]] =>
[[variable("STANDARD_STRAIGHTLINING_COUNT")]] =>
[[variable("STANDARD_STRAIGHTLINING")]] =>
[[variable("STANDARD_OPENTEXTGIBBERISH_COUNT")]] =>
[[variable("STANDARD_OPENTEXTGIBBERISH")]] =>
[[variable("STANDARD_OPENTEXTBADWORDS_COUNT")]] =>
[[variable("STANDARD_OPENTEXTBADWORDS")]] =>
[[variable("STANDARD_OPENTEXTONEWORDREQUIREDESSAY_COUNT")]] =>
[[variable("STANDARD_OPENTEXTONEWORDREQUIREDESSAY")]] =>
[[variable("STANDARD_CHECKBOXALL_COUNT")]] =>
[[variable("STANDARD_CHECKBOXALL")]] =>
[[variable("STANDARD_AVGQUESTSECONDS")]] => 46.4
[[variable("STANDARD_FINGERPRINT")]] => 3190959233
[[variable("STANDARD_GEODMA")]] => 659
[[variable("STANDARD_REFERER")]] => http://www.URL.com/s3/3793208/SurveyName-2-0
[[variable("STANDARD_USERAGENT")]] => Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko
[[variable("PORTAL_RELATIONSHIP")]] =>
[[variable("1-shown")]] => 1
[[variable("4-shown")]] => 1
[[variable("5-shown")]] => 1
[[variable(5)]] => 10005
[[variable("7-shown")]] =>
[[variable("11-shown")]] => 1
[[variable(11)]] => 10011
[[variable("13-shown")]] => 1
[[variable(13)]] => 10015
[[variable("14-shown")]] => 1
[[variable("15-shown")]] => 1
[[variable(15)]] => 10020
[[variable("17-shown")]] => 1
[[variable(27)]] => 10045
[[variable("27-shown")]] => 1
[[variable(29)]] =>
[[variable("29-shown")]] =>
[[variable("34-shown")]] => 1
[[variable(35)]] => 10061
[[variable("35-shown")]] => 1
[[variable(36)]] => 10064
[[variable("36-shown")]] => 1
[[variable("42-shown")]] =>
[[variable(42)]] =>
[[variable("44-shown")]] =>
[[variable("46-shown")]] => 1
[[variable(46)]] => 10084
[[variable("51-shown")]] => 1
[[variable(51)]] => 10124
[[variable(53)]] => 10106
[[variable("53-shown")]] => 1
[[variable("55-shown")]] => 1
[[variable("56-shown")]] => 1
[[variable("57-shown")]] => 1
[[variable("91-shown")]] => 1
[[variable(91)]] => 10214
[[variable("93-shown")]] => 1
[[variable("94-shown")]] => 1
[[variable("97-shown")]] =>
[[variable("98-shown")]] =>
[[variable("99-shown")]] =>
[[variable("100-shown")]] =>
[[variable("101-shown")]] => 1
[[variable("102-shown")]] => 1
[[variable(102)]] => 10232
[[variable("105-shown")]] =>
[[variable(105)]] =>
[[variable("106-shown")]] =>
[[variable(106)]] =>
[[variable("108-shown")]] => 1
[[variable(109)]] =>
[[variable("109-shown")]] =>
[[variable(110)]] =>
[[variable("110-shown")]] =>
[[variable(111)]] => 10267
[[variable("111-shown")]] => 1
[[variable(112)]] =>
[[variable("112-shown")]] =>
[[variable(113)]] =>
[[variable("113-shown")]] =>
[[variable(114)]] =>
[[variable("114-shown")]] =>
[[variable(115)]] => 10287
[[variable("115-shown")]] => 1
[[variable(116)]] =>
[[variable("116-shown")]] =>
[[variable(117)]] => 10297
[[variable("117-shown")]] => 1
[[comment(5)]] =>
[[comment(11)]] =>
[[comment(13)]] =>
[[comment(15)]] => Some text here
[[comment(27)]] =>
[[comment(29)]] =>
[[comment(35)]] =>
[[comment(36)]] =>
[[comment(42)]] =>
[[comment(46)]] =>
[[comment(51)]] => Some text here
[[comment(53)]] =>
[[comment(102)]] =>
[[comment(105)]] =>
[[comment(106)]] =>
[[comment(109)]] =>
[[comment(110)]] =>
[[comment(111)]] =>
[[comment(112)]] =>
[[comment(113)]] =>
[[comment(114)]] =>
[[comment(115)]] =>
[[comment(116)]] =>
[[comment(117)]] =>
)
这就是我到目前为止所提出的问题。当我调试时,我收到一条错误消息,说Newtonsoft.Json.JsonReaderException:&#39;解析值时遇到意外的字符:Q。路径&#39;&#39;,第0行,第0位。&#39; 我已经在JSONLint.com上验证了JSON,它说它是有效的JSON。我做错了什么?
using System;
using System.IO;
using System.Net;
using System.Web.Script.Serialization;
using QuickType;
using Newtonsoft.Json;
using System.Diagnostics;
public partial class dashboard_jsosn4 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
var myWebClient = new WebClient();
string strURL = "http://restapi.URLHere.json?api_token=token&api_token_secret=secret&resultsperpage=1000&filter[field][0]=datesubmitted&filter[operator][0]=%3E=&filter[value][0]=2017-08-21&filter[field][3]=datesubmitted&filter[operator][3]=%3C&filter[value][3]=2018-01-08&filter[field][1]=status&filter[operator][1]==&filter[value][1]=Complete";
string getSurveyResponses = myWebClient.DownloadString(strURL);
Datum datum = JsonConvert.DeserializeObject<Datum>(getSurveyResponses.ToString());`
JsonTextReader reader = new JsonTextReader(new StringReader(datum.ToString()));
while (reader.Read())
{
if (reader.Value != null)
{
Response.Write(reader.Value);
}
else
{
Response.Write("Null");
}
}
Response.Write("Done");
}
}