针对如何通过键从gson对象获取值和根据键获取值这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展c#从json对象获取嵌套数据值、C#从反序列化的json对象中获取值、C#JSON数组通过键
针对如何通过键从gson对象获取值和根据键获取值这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展c#从json对象获取嵌套数据值、C#从反序列化的json对象中获取值、C#JSON数组通过键获取值,而无需为每个循环使用强类型类、jquery – 从json对象获取密钥名称等相关知识,希望可以帮助到你。
本文目录一览:- 如何通过键从gson对象获取值(根据键获取值)
- c#从json对象获取嵌套数据值
- C#从反序列化的json对象中获取值
- C#JSON数组通过键获取值,而无需为每个循环使用强类型类
- jquery – 从json对象获取密钥名称
如何通过键从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
类型为的变量Object
。Object
没有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对象获取嵌套数据值?
你好,我有一个包含嵌套数据的 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对象中获取值
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数组通过键获取值,而无需为每个循环使用强类型类
好吧,按照一些建议,通过反复试验,我使用动态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对象获取密钥名称
我有一个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添加到字符串的开头?
解决方法
并且您无法使用索引访问对象属性.
你可以试试
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对象获取密钥名称等更多相关知识的信息可以在本站进行查询。
本文标签: