GVKun编程网logo

如何通过键从gson对象获取值(根据键获取值)

17

针对如何通过键从gson对象获取值和根据键获取值这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展c#从json对象获取嵌套数据值、C#从反序列化的json对象中获取值、C#JSON数组通过键

针对如何通过键从gson对象获取值根据键获取值这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展c#从json对象获取嵌套数据值、C#从反序列化的json对象中获取值、C#JSON数组通过键获取值,而无需为每个循环使用强类型类、jquery – 从json对象获取密钥名称等相关知识,希望可以帮助到你。

本文目录一览:

如何通过键从gson对象获取值(根据键获取值)

如何通过键从gson对象获取值(根据键获取值)

我从字符串定义一个新的gson对象:

此处的字符串示例:http :
//api.soundrop.fm/spaces/XJTt3mXTOZpvgmOc

public void convertToJson(){    Gson gson = new Gson();    Object gsonContent = gson.fromJson( stringContent, RadioContent.class );}

然后尝试返回一个值:

public Object getValue( String find ){    return gsonContent.find;}

最后用:

public static void print( String find = "title" ){    Object value = radioContent.getValue( find );    System.out.println( value );}

但是我得到一个错误:

java: cannot find symbol  symbol:   variable find  location: variable gsonContent of type java.lang.Object

完整班:主班:http :
//pastebin.com/v4LrZm6k
无线电班:http :
//pastebin.com/2BWwb6eD

答案1

小编典典

这是Java。字段根据对象引用的声明类型进行解析。

根据您的编译器错误,gsonContent类型为的变量ObjectObject没有find字段。

您已经在告诉Gson要反序列化的类型,所以只需将gsonContent变量设为该类型

RadioContent gsonContent = gson.fromJson( stringContent, RadioContent.class );

另外,似乎您正在gsonContent用局部变量遮盖实例字段。


您也可以执行以下操作

JsonObject jsonObject = gson.fromJson( stringContent, JsonObject.class);jsonObject.get(fieldName); // returns a JsonElement for that name

c#从json对象获取嵌套数据值

c#从json对象获取嵌套数据值

如何解决c#从json对象获取嵌套数据值?

你好,我有一个包含嵌套数据的 json 对象,如下所示

{
"key1":"test","key2":{
  "key3" :"test2"
 }
}

我有一个像下面这样的列表

  List<string> listkeys=  new List<string>() {"key1","key2.key3" }

我想进入 listkeys 循环并从 json 对象动态获取值。

foreach (int element in listkeys)
{
    //how can I get value with element
}

我找不到任何解决方案。

提前致谢

解决方法

对于 Json.NET,我推荐 SelectToken。请参阅Querying JSON with SelectToken。

foreach (var element in listkeys) // btw. var/string,not `int`
{
    JToken j = o.SelectToken($"$..{element}");
}
,

假设您使用 JSON.net 来解析 Json,您可以这样做。

foreach (string element in listkeys) // Quick fix,listkeys stores strings,not integers
{
    string[] keys = element.split("."); // "key2.key3" => ["key2","key3"]
    JObject obj = <jsonObject>;
    foreach (string key in keys) // When key = "key2",obj = <jsonObject>["key2"],when key = "key3",obj = <jsonObject>["key2"]["key3"]
        obj = obj[key];
    <do something with obj>
}

只需将 jsonObject 替换为您的 Json 对象即可。

C#从反序列化的json对象中获取值

C#从反序列化的json对象中获取值

我目前正在使用以下代码使用Newtonsoft.Json nuget数据包反序列化一个json字符串:

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

现在我收到的格式如下:

{{  "Meta": {    "rap": 2098,"count": 5  },"data": [    {      "name": "Gold Tetramino of Mastery","rap": 735,"uaid": "16601901","link": "https://www.roblox.com/Gold-Tetramino-of-Mastery-item?id=5786047","img": "https://t4.rbxcdn.com/081337d7ea86e6a406512aaa83bbcdeb","serial": "---","count": 1    },{      "name": "Silver Tetramino of Accomplishment","rap": 385,"uaid": "16601900","link": "https://www.roblox.com/Silver-Tetramino-of-Accomplishment-item?id=5786026","img": "https://t1.rbxcdn.com/60da69cd76f8dad979326f63f4a5b657",{      "name": "Subzero Ski Specs","rap": 370,"uaid": "155175547","link": "https://www.roblox.com/Subzero-Ski-Specs-item?id=19644587","img": "https://t4.rbxcdn.com/8ead2b0418ef418c7650d34103d39b6d",{      "name": "Rusty Tetramino of Competence","rap": 319,"uaid": "16601899","link": "https://www.roblox.com/Rusty-Tetramino-of-Competence-item?id=5785985","img": "https://t2.rbxcdn.com/968ad11ee2f4ee0861ae511c419148c8",{      "name": "Bluesteel Egg of Genius","rap": 289,"uaid": "16601902","link": "https://www.roblox.com/Bluesteel-Egg-of-Genius-item?id=1533893","img": "https://t7.rbxcdn.com/48bf59fe531dd1ff155e455367e52e73","count": 1    }  ]}}

现在我试图从中获取以下值:

"rap": 2098,

我只需要2098而且我一直在尝试以下代码:

string rap = data["rap"].Value<string>();

但遗憾的是,这不起作用.有谁知道如何获得价值?

解决方法

尝试:

var result = data["Meta"]["rap"].Value<int>();

要么

var result = data.SelectToken("Meta.rap").ToString();

或者如果您不想要传递整个路径,您可以像这样搜索属性:

var result = data.Descendants()
                 .OfType<JProperty>()
                 .FirstOrDefault(x => x.Name == "rap")
                 ?.Value;

C#JSON数组通过键获取值,而无需为每个循环使用强类型类

C#JSON数组通过键获取值,而无需为每个循环使用强类型类

好吧,按照一些建议,通过反复试验,我使用动态JObject使其工作:

“结果”下方的注释是从我正在调用的API返回的JSON字符串。

请参考原始问题中显示的JSON结构,以了解如何获得这些属性:

dynamic jsonObject = JObject.Parse(result);
dynamic rows = jsonObject.rows;

foreach (var property in rows)
{   
   Console.WriteLine(property[0]); // = "2020-09-09T19:09:06.5560521Z"
   Console.WriteLine(property[1]); // = "Information"
   Console.WriteLine(property[2]); // = null
   Console.WriteLine(property[3]["LogEventCategory"]); // = "System"
   Console.WriteLine(property[3]["LogEventType"]); // = "Application Startup"
   Console.WriteLine(property[3]["LogEventSource"]);
   // And the rest of the properties required from the fourth object i.e. the items within the inner paranthesis.
   // Note in the foreach loop,we will iterate through 'rows' array
   // Instead of using console.writeline,in producton code i'll be adding ther items to a list.
}

最后一点:使用动态JObject解析意味着我们现在根本不需要任何C#类,因此问题中显示的那个将从我的代码中删除。

jquery – 从json对象获取密钥名称

jquery – 从json对象获取密钥名称

这与问题 json get key names as text?几乎完全相同,但该回复对我不起作用.

我有一个json对象

{"userList":[
{"user1":[{"username":"mike","memberSince":"01/03/2011"}]},{"user2":[{"username":"john","memberSince":"01/05/2011"}]},]}

我拥有“user1”和“user2”标签的唯一原因是因为我将用户列表通过userId存储在jQuery数据中,然后对其进行字符串化以将其放入cookie中并将其发送到另一个页面中.我知道,听起来很愚蠢,但我只是在构建一些前端的东西来证明一点,然后才能正确地使用db.

所以

jQuery('div#userList').data('user1',user1JSON);

变成

{"user1":[{"username":"mike","memberSince":"01/03/2011"}]}

使用时

var userlist=JSON.stringify(jQuery('div#userList').data());

因此,用户信息现在是userId的子级,而不仅仅是用户列表的子级.

为了获得用户信息,我应该可以说

for(u=0;u<userList.length;u++){
   var userInfo=userList[u][0];
}

但不幸的是,这只是给我一个未定义的错误.如果我使用

var userInfo = userList[u]['user1'];

我正确地获得了用户信息.

所以,有人可以纠正我为什么userList [u] [0]不起作用,或者

向我解释如何使用JSON.stringify而不将userid添加到字符串的开头?

解决方法

那是因为userList [u]返回一个对象,而不是一个数组.

并且您无法使用索引访问对象属性.

你可以试试

for(u=0;u<userList.length;u++){
   for (var user in userList[u])
        {
          // user is the key
          // userList[u][user] is the value
          var userInfo=userList[u][user];
        }
}

今天关于如何通过键从gson对象获取值根据键获取值的介绍到此结束,谢谢您的阅读,有关c#从json对象获取嵌套数据值、C#从反序列化的json对象中获取值、C#JSON数组通过键获取值,而无需为每个循环使用强类型类、jquery – 从json对象获取密钥名称等更多相关知识的信息可以在本站进行查询。

本文标签: