如何将变量值“传递”给 JSON 动态对象?

Posted

技术标签:

【中文标题】如何将变量值“传递”给 JSON 动态对象?【英文标题】:How to "pass" a variable value to a JSON dynamic object? 【发布时间】:2021-11-29 04:03:24 【问题描述】:

我不知道如何正确地说,这就是我写“通过”的原因(请纠正我)。 我想做的是根据另一个变量值从 JSON 对象中检索一个值

这是代码

WebClient client = new WebClient();
string list = client.DownloadString("https://linkto.json");
dynamic json = JsonConvert.DeserializeObject(list);
var2 = json.variable[0].image;

它需要读取它说“变量”的变量值,但我不确定这是否可能或是否以其他方式完成

另一个编辑:代码上的“变量”是应该读取变量的位置,我不知道如何让它读取值或任何东西

我尝试在这个论坛和互联网上搜索,但我不确定要搜索什么或我应该使用什么

提前感谢您的任何回答!

编辑:

这是 JSON 字符串


  "Person1": [
    
    "image": "http://linktoimage.com",
    "icon": "http://linktoicon.com",
    "background": ""
    
  ],
  "Person2": [
    
    "image": "https://linktoimage",
    "icon": "",
    "background": "no-background"
    
  ]

JSON 字符串的简短示例

另一个编辑:JSON 字符串可以随时间变化,带有新的数组

【问题讨论】:

您的意思是您知道您的 json 对象将有一个名为“变量”的数组属性,并且您想获取其第一个元素的图像属性?您能否提供详细信息(您的 json 对象的一部分在此处复制以使这一点更清楚)? 你试过json[0].image吗?不知道json字符串很难分辨 @Gigs 我会用 json 字符串编辑问题 @Gigs 是的,这就是我的意思 @MrCoolandroid 您是否希望能够指定“Person1”或“Person2”在运行时被拉取?这是你需要的吗? 【参考方案1】:

使用数据的最佳方式是反序列化你下载的json

string json = client.DownloadString("https://linkto.json");
var jsonDeserialized= JsonSerializer.Deserialize<Dictionary<string, List<PersonImage>> >(json).ToList();
List<Person> persons = jsonDeserialized.Select(j => new Person  Name = j.Key, Images = j.Value ).ToList();

杰森格式的人

[
  
    "Name": "Person1",
    "Images": [
      
        "image": "http://linktoimage.com",
        "icon": "http://linktoicon.com",
        "background": ""
      
    ]
  ,
  
    "Name": "Person2",
    "Images": [
      
        "image": "https://linktoimage",
        "icon": "",
        "background": "no-background"
      
    ]
  
]

测试,名字为“Person1”的人的第一张图片

var image=persons.FirstOrDefault(p => p.Name=="Person1").Images[0].image; // http://linktoimage.com

public class Person

    public string Name  get; set; 
    public List<PersonImage> Images get;set;

 public class PersonImage

    public string image  get; set; 
    public string icon  get; set; 
    public string background  get; set; 

【讨论】:

我会这样做,但是数组太多了,我以人作为数组的示例,我会使用一个类但有很多 @MrCoolAndroid 这只是一个示例。我不知道你在想什么。您可以向这些类添加更多属性,或者如果它不同,则必须发布真实的 json。不能使用任何动态反序列化 json。 我真正想做的是根据我所说的变量获取对象值,但是 json 会随着时间的推移而变化,所以每次 json 变化时我都需要编译 @MrCoolAndroid 随着时间的推移,一切都在发生变化,你永远不会做出一个永远不变的应用程序。任何应用程序都需要支持,而且在出现错误和功能更改之前,代码几乎每天都在变化。 当然可以,但只是说它至少有 300 个或更多数组【参考方案2】:

所以我设法通过修改 JSON 格式来做到这一点,我就是这样做的

"Games":[

         "titleimage": "",
         "titleicon": "",
         "titlebackground": ""
,

         "titleimage": "",
         "titleicon": "",
         "titlebackground": ""
,

        "titleimage": "",
        "titleicon": "",
        "titlebackground": ""
]

那么我可以使用 Foreach 来获得价值

【讨论】:

以上是关于如何将变量值“传递”给 JSON 动态对象?的主要内容,如果未能解决你的问题,请参考以下文章

如何将变量值传递给套接字字符串

将变量值从 JS 传递给 PHP

如何将变量值从一个文件中的一个类传递给另一个文件中的另一个类python tkinter

通过单击鼠标将变量值传递给java中的servlet

将变量值传递给 paypal API - first_name 和 last_name

如何将变量值用作JS对象中的属性[重复]