ChartJS 如何从http get请求中获取json响应

sqyvllje  于 2022-11-06  发布在  Chart.js
关注(0)|答案(2)|浏览(293)

我从API获取数据并将其转换为json字符串,如下所示-

  1. [HttpGet]
  2. public async Task<JProperty[]> GetSomeDataAsync()
  3. {
  4. try
  5. {
  6. HttpClient client = new HttpClient();
  7. client.BaseAddress = new Uri("myURI");
  8. HttpResponseMessage response = await client.GetAsync(client.BaseAddress);
  9. response.EnsureSuccessStatusCode();
  10. //string responseBody = await response.Content.ReadAsStringAsync();
  11. if (response != null)
  12. {
  13. jsonString = await response.Content.ReadAsStringAsync();
  14. jsonObject = JObject.Parse(jsonString);
  15. //return JsonConvert.DeserializeObject(jsonString);
  16. //return JsonConvert.DeserializeObject<object>(jsonString);
  17. var x = jsonObject.Descendants().OfType<JProperty>().Where(p => p.Name == "observations")
  18. .ToArray();
  19. return x;
  20. }
  21. else
  22. {
  23. throw new ArgumentNullException();
  24. }
  25. }
  26. catch (Exception ex)
  27. {
  28. }

上述代码写入控制器中,并将响应发送至Angular 组件,其中包含以下代码-

  1. public economicData: any | null = null;
  2. public value: any;
  3. chart: any=[];
  4. constructor(http: HttpClient, @Inject('BASE_URL') baseUrl: string)
  5. {
  6. http.get<any>(baseUrl + 'somedata', { context: new
  7. HttpContext().set(IsCacheable, true)
  8. }).subscribe(result => {
  9. this.economicData = result;
  10. console.log(this.economicData);
  11. this.value = this.economicData.observations.map((observations:
  12. any) => {
  13. observations.value });
  14. console.log(this.value);
  15. }, error => console.error(error));
  16. }`

我可以在控制器的调试模式下看到数组中的数据。但是我在控制台日志中的对象数组中没有得到任何数据,在调试时也没有在组件的结果中得到任何数据。因此,我无法将json中的属性Map到图表。
以下是console.log-enter image description here中记录的输出图像

avkwfej4

avkwfej41#

我不确定我是否完全理解你的问题,但我会给予。
此代码来自您的段段:

  1. this.economicData = result;
  2. console.log(this.economicData);
  3. this.value = this.economicData.observations // other code here

根据您的控制台日志截图,this.economicData是一个数组。但是,当您尝试访问它的属性时,我希望会给予错误。

o2g1uqev

o2g1uqev2#

看看我的例子。你必须安装newtonsoft nuget包,以便这个代码的工作。

  1. using (var client = new HttpClient())
  2. {
  3. client.BaseAddress = new Uri("API URL");
  4. client.DefaultRequestHeaders.Accept.Clear();
  5. client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
  6. var inputs = new Parameters() { inputs }; // parameters is a class of your api input parameters
  7. HttpResponseMessage response = await client.PostAsJsonAsync("Continuation of your API URL", inputs);
  8. var resultString = await response.Content.ReadAsStringAsync();
  9. Excel resultJson = JsonConvert.DeserializeObject<your API Output Class>(resultString)!;
  10. if (response.IsSuccessStatusCode)
  11. {
  12. // your code after api response receive.
  13. }
  14. else
  15. {
  16. Console.WriteLine("Error");
  17. }
  18. }

如果这对某人有帮助,请投赞成票并接受这个答案。谢谢

展开查看全部

相关问题