首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >部分反序列化JSON以仅获取所需的属性

部分反序列化JSON以仅获取所需的属性
EN

Stack Overflow用户
提问于 2018-07-26 09:36:31
回答 2查看 99关注 0票数 2

我在JSON格式中得到了很大的响应,我只需要2个字符串,这里是我的JSON文件,我简化了它以便更好地阅读

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  "cdn_url": "https://f.vimeocdn.com",
  "vimeo_api_url": "api.vimeo.com",
  "request": {
    "files": {
      "progressive": [
        {
          "profile": 164,
          "width": 622,
          "mime": "video/mp4",
          "fps": 25,
          "url": "1047326445.mp4",
          "cdn": "akamai_interconnect",
          "quality": "360p",
          "id": 1047326445,
          "origin": "gcs",
          "height": 360
        },
        {
          "profile": 165,
          "width": 932,
          "mime": "video/mp4",
          "fps": 25,
          "url": "1047326437.mp4",
          "cdn": "akamai_interconnect",
          "quality": "540p",
          "id": 1047326437,
          "origin": "gcs",
          "height": 540
        }
      ]
    }
  },

  "video": {
    "version": {
      "current": null,
      "available": null
    },
    "height": 540,
    "duration": 401,
    "thumbs": {
      "640": "712851375_640.jpg",
      "960": "712851375_960.jpg",
      "base": "712851375"
    },
    "id": 279550927,
    "default_to_hd": 0,
    "url": null,
    "privacy": "disable",
    "unlisted_hash": null
  }
}

为了更好地阅读,我从其中删除了很多对象。我想要"url":"1047326445.mp4",从“渐进式数组和字符串”640变量,这是在视频对象。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    protected void btnclick_Click(object sender, EventArgs e)
    {
        string normalURL = "279550927";
        string urlJSONcall = "https://player.vimeo.com/video/" + normalURL + "/config";

        string json = null;

        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(urlJSONcall);
        HttpWebResponse response = null;

        try
        {
            response = (HttpWebResponse)request.GetResponse();
            var responseStream = response.GetResponseStream();

            if ((responseStream != null) && responseStream.CanRead)
            {
                using (var reader = new System.IO.StreamReader(responseStream))
                {
                    json = reader.ReadToEnd();
                    LBresponse.Text = json;
                }
            }
        }
        finally
        {
            if (response != null)
            {
                response.Close();
            }
        }

        var data = (JObject)JsonConvert.DeserializeObject(json);

    }
}

由于嵌套的对象,我很难解决它。

我不知道下一步该做什么

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-30 11:26:43

我通过这个得到了想要的结果,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        string json = null;

        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(urlJSONcall);
        HttpWebResponse response = null;

        try
        {
            response = (HttpWebResponse)request.GetResponse();
            var responseStream = response.GetResponseStream();

            if ((responseStream != null) && responseStream.CanRead)
            {
                using (var reader = new System.IO.StreamReader(responseStream))
                {
                    json = reader.ReadToEnd();

                }
            }
        }
        finally
        {
            if (response != null)
            {
                response.Close();
            }
        }

        var datao = (JObject)JsonConvert.DeserializeObject(json);
        //LBresponse.Text = data.ToString();
        string urll = (string)datao["request"]["files"]["progressive"][0]["url"];

        string thumbnailImage = (string)datao["video"]["thumbs"]["640"];
        LBresponse.Text = urll.ToString();
        lbltumb.Text = thumbnailImage.ToString();
    }
票数 0
EN

Stack Overflow用户

发布于 2018-07-26 10:11:45

这对我很有效:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
protected void btnclick_Click(object sender, EventArgs e)
    {
        string normalURL = "279550927";
        string urlJSONcall = "https://player.vimeo.com/video/" + normalURL + "/config";
        using (var w = new WebClient())
        {
            var json_data = string.Empty;
            // attempt to download JSON data as a string
            try
            {
                json_data = w.DownloadString(urlJSONcall).Replace("\"640\"", "\"_640\"");;
            }
            catch (Exception) { }
            // if string with JSON data is not empty, deserialize it to class and return its instance 
            var mainObject = !string.IsNullOrEmpty(json_data) ? Newtonsoft.Json.JsonConvert.DeserializeObject<dynamic>(json_data) : null;

            string cdn_url = mainObject?.cdn_url;
            string vimeo_api_url = mainObject?.vimeo_api_url;
            string _640 = mainObject?.video?.thumbs?._640;
            var Prgs = mainObject?.request?.files?.progressive;
            foreach (var progressive in Prgs)
            {
                string URL = progressive.url;
            }
        }
    }

但是如果你关心返回的类型,你可以使用这个解决方案:步骤1:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
protected void btnclick_Click(object sender, EventArgs e)
    {
        string normalURL = "279550927";
        string urlJSONcall = "https://player.vimeo.com/video/" + normalURL + "/config";
        using (var w = new WebClient())
        {
            var json_data = string.Empty;
            // attempt to download JSON data as a string
            try
            {
                json_data = w.DownloadString(urlJSONcall).Replace("\"640\"", "\"_640\"");;
            }
            catch (Exception) { }
            // if string with JSON data is not empty, deserialize it to class and return its instance 
            MainObject mainObject = !string.IsNullOrEmpty(json_data) ? Newtonsoft.Json.JsonConvert.DeserializeObject<MainObject>(json_data) : null;

            string cdn_url = mainObject?.cdn_url;
            string vimeo_api_url = mainObject?.vimeo_api_url;
            string _640 = mainObject?.video?.thumbs?._640;
            var Prgs = mainObject?.request?.files?.progressive;
            foreach (Progressive progressive in Prgs)
            {
                string URL = progressive.url;
            }
        }
    }

Step2:添加这些类以浏览属性

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   public class MainObject
{
    public string cdn_url { get; set; }
    public string vimeo_api_url { get; set; }
    public Request request { get; set; }
    public Video video { get; set; }
}

public class Request
{
    public Files files { get; set; }
}

public class Files
{
    public Progressive[] progressive { get; set; }
}

public class Progressive
{
    public string url { get; set; }
}

public class Video
{
    public Thumbs thumbs { get; set; }
}
public class Thumbs
{
    public string _640 { get; set; }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51535649

复制
相关文章
回调函数在Java中的应用
关于回调函数(Callback Function),维基百科已经给出了相当简洁精炼的释义。Java的面向对象模型不支持函数,其无法像C语言那样,直接将函数指针作为参数;尽管如此,我们依然可以基于接口来获得等效的回调体验。
程序猿杜小头
2022/12/01
2.9K0
python 回调装饰器
通过使用生成器和协程可以使得回调函数内联在某个函数中。 为了演示说明,假设你有如下所示的一个执行某种计算任务然后调用一个回调函数的函数(参考7.10小节):
用户5760343
2019/10/21
1.2K0
python twisted 回调函数
from twisted.internet.protocol import Protocol, ClientFactory
用户5760343
2022/05/14
6850
asp.net中回发或回调参数无效。在配置中使用 <pages enableEventValidation=”… 问题解决[通俗易懂]
回发或回调参数无效。在配置中使用 <pages enableEventValidation=”…
全栈程序员站长
2022/09/15
2K0
SystemVerilog中的callback(回调)
在第二次systemverilog实验中,我看到有同学用到了callback函数,今天就是简单讲讲这个方法。
数字IC小站
2020/06/30
2.6K0
Python回调函数的实现
回调函数就是一个通过函数名调用的函数。如果你把函数的名字(地址)作为参数传递给另一个函数,当这个参数被用来调用其所指向的函数时,我们就说这是回调函数.
Python碎片公众号
2021/02/26
3.9K0
Python回调函数的实现
回调
回调简单而言:在一个类(A)的方法(a)中调用另一个类(B)的方法(b),当方法(b)执行完之后就调用类(A)中的方法(c),这就是回调的过程,是不是很简单?简单分析可以知道一个类(A)持有另一个类(B)的引用,方法(c)就叫做回调函数,画成UML图就如下所示:
晚上没宵夜
2020/03/10
2.6K0
iOS中的「回调(callback)」
本文主要参考:《Object-C 编程 Big Nerd Ranch Guide》一书第24章
iOS Development
2019/02/14
3.5K0
javascript异步中的回调
我们之前介绍了javascript异步的相关内容,我们知道javascript以同步,单线程的方式执行主线程代码,将异步内容放入事件队列中,当主线程内容执行完毕就会立即循环事件队列,直到事件队列为空,当用产生用户交互事件(鼠标点击,点击键盘,滚动屏幕等待),会将事件插入事件队列中,然后继续执行。 处理异步逻辑最常用的方式是什么?没错这就是我们今天要说的---回调
陌上寒
2019/04/02
2.1K0
javascript异步中的回调
java 中的异步回调
异步回调,本来在c#中是一件极为简单和优雅的事情,想不到在java的世界里,却如此烦琐,先看下类图: 先定义了一个CallBackTask,做为外层的面子工程,其主要工作为start 开始一个异步操作
菩提树下的杨过
2018/01/18
3.2K0
java 中的异步回调
python 协程 future 回调
cancel(): 取消future的执行,调度回调函数 result(): 返回future代表的结果 exception(): 返回future中的Exception add_done_callback(fn): 添加一个回调函数,当future执行的时候会调用这个回调函数 remove_done_callback(fn): 从“call whten done”列表中移除所有callback的实例 set_result(result): 将future标为执行完成,并且设置result的值 set_exception(exception): 将future标为执行完成,并设置Exception
用户5760343
2022/01/09
7710
python 协程 future 回调
python中的Redis键空间通知(过期回调)
Redis是一个内存数据结构存储库,用于缓存,高速数据摄取,处理消息队列,分布式锁定等等。
人生不如戏
2018/09/27
6K0
​29 - 回调函数和回调地狱
原文地址:https://dev.to/bhagatparwinder/callback-functions-callback-hell-79n
前端黑板报
2022/12/01
4.6K0
什么是回调地狱?如何解决回调地狱问题_地狱回调
这个问题呢,需要从Node.js的API说起,这里就会有人问了?博主你不是说回调地狱的问题吗,怎么说到API了,别急,看博主一步一步的解释给你听:
全栈程序员站长
2022/11/15
3.2K0
实战 | Apache Hudi回调功能简介及使用示例
从0.6.0版本开始,Hudi开始支持 commit 回调功能,即每当Hudi成功提交一次 commit, 其内部的回调服务就会向外部系统发出一条回调信息,用户可以根据该回调信息查询Hudi表的增量数据,并根据具体需求进行相应的业务处理。
ApacheHudi
2021/04/13
9990
Python 中的进程、线程、协程、同步、异步、回调
进程和线程究竟是什么东西?传统网络服务模型是如何工作的?协程和线程的关系和区别有哪些?IO过程在什么时间发生? 在刚刚结束的 PyCon2014 上海站,来自七牛云存储的 Python 高级工程师许智翔带来了关于 Python 的分享《Python中的进程、线程、协程、同步、异步、回调》。 一、上下文切换技术 简述 在进一步之前,让我们先回顾一下各种上下文切换技术。 不过首先说明一点术语。当我们说“上下文”的时候,指的是程序在执行中的一个状态。通常我们会用调用栈来表示这个状态——栈记载了每个调用层级执行到哪
小小科
2018/05/02
1.6K0
回调函数原理与Python实现
回调函数的定义与普通函数并没有本质的区别,但一般不直接调用,而是作为参数传递给另一个函数,当另一个函数中触发了某个事件、满足了某个条件时就会自动调用回调函数。下面的代码用来删除可能会包含只读属性文件的文件夹,主要演示回调函数的原理和用法。 import os import stat def remove_readonly(func, path): #定义回调函数 os.chmod(path, stat.S_IWRITE) #删除文件的只读属性
Python小屋屋主
2018/04/16
1.7K0
ajax中回调的几个坑
在前端开发中,经常要用ajax去拿后台接口返回的数据,总结几个ajax的回调的常见问题,供大家参考爬坑。
全栈程序员站长
2022/07/21
7400
点击加载更多

相似问题

Python bokeh回调函数滑块

12

Bokeh问题中的Python回调

119

Bokeh:在单个Python回调中多次更新图形

11

Bokeh回调范围

10

Bokeh多选择部件回调不起作用

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文