首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >C#按键值对JSON分组

C#按键值对JSON分组
EN

Stack Overflow用户
提问于 2018-08-29 17:26:31
回答 1查看 811关注 0票数 0

社区I有一个存储过程,它将此JSON作为响应返回:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[
  {
    "displayorder": 2,
    "oppItemID": 4,
    "opportunityName": "Net 10",
    "title": "New Amazing Promotion",
    "description": "Amazing",
    "image": "imagelink",
    "opDate": "2018-08-09T22:00:00.937",
    "slideOrder": 0,
    "status": false,
    "isCover": false
  },
  {
    "displayorder": 1,
    "oppItemID": 2,
    "opportunityName": "Simple Mobile",
    "title": "New promo",
    "description": "Amazing",
    "image": "imagelink",
    "opDate": "2018-08-09T22:00:00.937",
    "slideOrder": 0,
    "status": false,
    "isCover": false
  },
  {
    "displayorder": 1,
    "oppItemID": 3,
    "opportunityName": "Simple Mobile",
    "title": "New Amazing Promotion",
    "description": "Amazing",
    "image": "imagelink",
    "opDate": "2018-08-10T22:00:00.937",
    "slideOrder": 0,
    "status": false,
    "isCover": false
  },
  {
    "displayorder": 8,
    "oppItemID": 5,
    "opportunityName": "Verizon",
    "title": "New Amazing Promotion",
    "description": "Amazing",
    "image": "imagelink",
    "opDate": "2018-08-09T22:00:00.937",
    "slideOrder": 0,
    "status": false,
    "isCover": false
  },
  {
    "displayorder": 8,
    "oppItemID": 27,
    "opportunityName": "Verizon",
    "title": "New Amazing",
    "description": "Amazing",
    "image": "imagelink",
    "opDate": "2018-08-22T22:00:00.937",
    "slideOrder": 0,
    "status": false,
    "isCover": false
  }
]

如您所见,有多个对象具有相同的"opportunityName“

我想要做的是根据特定的"opportunityName“对它们进行分组,并有一个对象列表,即:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
"Varizon":{
     0:{
        "displayorder": 8,
        "oppItemID": 5,
        "title": "New Amazing Promotion",
        "description": "Amazing",
        "image": "imagelink",
        "opDate": "2018-08-09T22:00:00.937",
        "slideOrder": 0,
        "status": false,
        "isCover": false
      },
      1:{
        "displayorder": 8,
        "oppItemID": 27,
        "title": "New Amazing",
        "description": "Amazing",
        "image": "imagelink",
        "opDate": "2018-08-22T22:00:00.937",
        "slideOrder": 0,
        "status": false,
        "isCover": false
      }
}

其余商机名称也是如此

代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public List<OpportunitiesByNameForDisplay> GetBdmOpportunites(string rswnum)
        {
            List<OpportunitiesByNameForDisplay> OpportunitiesByNameForDisplay = new List<OpportunitiesByNameForDisplay>();
            SqlParameter[] sqlParams;
            List<object> real = new List<object>();
            try
            {
                var rswnumber = new SqlParameter("@AccountNumber", rswnum);

                sqlParams = new SqlParameter[1] {
                   rswnumber
                };

                string sql = "exec RSW_Reports_API.dbo.sp_CRMApp_GetAppointmentOpportunitiesFromZoomTesting " + rswnumber ;
                OpportunitiesByNameForDisplay = db.Database.SqlQuery<OpportunitiesByNameForDisplay>(sql,sqlParams).ToList();

                real = OpportunitiesByNameForDisplay.GroupBy(g => new List<Object> {
                    g.OpportunityName,
                    slide = new
                    {
                        g.Title,
                        g.Description,
                        g.Image,
                        g.opDate,
                        g.status,
                        g.SlideOrder,
                        g.displayorder
                    }
                });
            }
            catch (Exception ex){}
            return OpportunitiesByNameForDisplay;
        }

我在g.OpportunityName上得到了无效的初始化器声明符,有没有办法让它工作或者更好呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-29 20:39:15

从您发布的纯json开始,使用LINQ转换数据。我认为在假设你想要json string之后,这与你的想法很接近。从你的方法中返回的是一个对象,而不是一个序列化的字符串。

棘手的部分是将值放入关键位置,这可以通过ToDictionary()来完成。

如果这对你来说不是一个完美的解决方案,我希望它能给你一些建议。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var json = "[{\"displayorder\":2,\"oppItemID\":4,\"opportunityName\":\"Net 10\",\"title\":\"New Amazing Promotion\",\"description\":\"Amazing\",\"image\":\"imagelink\",\"opDate\":\"2018-08-09T22:00:00.937\",\"slideOrder\":0,\"status\":false,\"isCover\":false},{\"displayorder\":1,\"oppItemID\":2,\"opportunityName\":\"Simple Mobile\",\"title\":\"New promo\",\"description\":\"Amazing\",\"image\":\"imagelink\",\"opDate\":\"2018-08-09T22:00:00.937\",\"slideOrder\":0,\"status\":false,\"isCover\":false},{\"displayorder\":1,\"oppItemID\":3,\"opportunityName\":\"Simple Mobile\",\"title\":\"New Amazing Promotion\",\"description\":\"Amazing\",\"image\":\"imagelink\",\"opDate\":\"2018-08-10T22:00:00.937\",\"slideOrder\":0,\"status\":false,\"isCover\":false},{\"displayorder\":8,\"oppItemID\":5,\"opportunityName\":\"Verizon\",\"title\":\"New Amazing Promotion\",\"description\":\"Amazing\",\"image\":\"imagelink\",\"opDate\":\"2018-08-09T22:00:00.937\",\"slideOrder\":0,\"status\":false,\"isCover\":false},{\"displayorder\":8,\"oppItemID\":27,\"opportunityName\":\"Verizon\",\"title\":\"New Amazing\",\"description\":\"Amazing\",\"image\":\"imagelink\",\"opDate\":\"2018-08-22T22:00:00.937\",\"slideOrder\":0,\"status\":false,\"isCover\":false}]";
        var obj = JsonConvert.DeserializeObject<List<JSonClass>>(json);

        var transformed = obj 
                            .Select(  (value, index) => new {
                                            name = value.opportunityName,
                                            obj = new JSonClass2 {
                                                    displayorder = value.displayorder,
                                                    oppItemID = value.oppItemID,
                                                    title = value.title,
                                                    description = value.description,
                                                    image = value.image,
                                                    opDate = value.opDate,
                                                    slideOrder = value.slideOrder,
                                                    status = value.status,
                                                    isCover = value.isCover
                                                    }
                                            })
                .GroupBy(u=>u.name)  // groups by name
                .ToDictionary(       // use dictionary to move value from value position to key position 
                                wrap =>wrap.Key, 
                                wrap => wrap.Select( (v,i) => new { i, v.obj })
                .ToDictionary(w => w.i, w => w.obj )  
                );

        Console.WriteLine(JsonConvert.SerializeObject(transformed, Formatting.Indented));

控制台输出结果为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  "Net 10": {
    "0": {
      "displayorder": 2,
      "oppItemID": 4,
      "title": "New Amazing Promotion",
      "description": "Amazing",
      "image": "imagelink",
      "opDate": "2018-08-09T22:00:00.937",
      "slideOrder": 0,
      "status": false,
      "isCover": false
    }
  },
  "Simple Mobile": {
    "0": {
      "displayorder": 1,
      "oppItemID": 2,
      "title": "New promo",
      "description": "Amazing",
      "image": "imagelink",
      "opDate": "2018-08-09T22:00:00.937",
      "slideOrder": 0,
      "status": false,
      "isCover": false
    },
    "1": {
      "displayorder": 1,
      "oppItemID": 3,
      "title": "New Amazing Promotion",
      "description": "Amazing",
      "image": "imagelink",
      "opDate": "2018-08-10T22:00:00.937",
      "slideOrder": 0,
      "status": false,
      "isCover": false
    }
  },
  "Verizon": {
    "0": {
      "displayorder": 8,
      "oppItemID": 5,
      "title": "New Amazing Promotion",
      "description": "Amazing",
      "image": "imagelink",
      "opDate": "2018-08-09T22:00:00.937",
      "slideOrder": 0,
      "status": false,
      "isCover": false
    },
    "1": {
      "displayorder": 8,
      "oppItemID": 27,
      "title": "New Amazing",
      "description": "Amazing",
      "image": "imagelink",
      "opDate": "2018-08-22T22:00:00.937",
      "slideOrder": 0,
      "status": false,
      "isCover": false
    }
  }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52083141

复制
相关文章
Python对字典根据键值分组进行排序
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/119530.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/11
4.5K0
当JSON.parse”遇上”非键值对
在json大行其道并作为前后端主要通讯的数据格式之一时,对json本身的使用和了解多少人都会有些概念,当然随之而来的也是对json的对象以及其字符串形式的互相转换。在历史久远的过去,前端是通过低能的eval来实现格式转换的。
RobinsonZhang
2018/08/28
2.3K0
java键值对_Java 读写键值对
public static void main(String[] args) throws IOException {
全栈程序员站长
2022/07/23
2K0
Qt中QMap键值对基本用法(键值对)
T1为键值对中的键key,T2为键值对中的值。通过键值对中的键可以搜索到值。一般来说,键值对中的键是唯一的,不可重复,而值没有要求,可以重复。并且QMap具有自动排序功能,对输入的键进行排序。
全栈程序员站长
2022/09/02
3.6K0
亲,您的json键值对用双引号了吗? 转
JSON是一种取代XML的数据结构,和xml相比,它更小巧但描述能力却不差,由于它的小巧所以网络传输数据将减少更多流量从而加快速度。 那么,JSON到底是什么? JSON就是一串字符串 只不过元素
donghui
2019/04/19
1.8K0
键值对操作
键值对 RDD 通常用来进行聚合计算。我们一般要先通过一些初始 ETL(抽取、转化、装载)操作来将数据转化为键值对形式。键值对 RDD 提供了一些新的操作接口(比如统计每个产品的评论,将数据中键相同的分为一组,将两个不同的 RDD 进行分组合并等)。
全栈程序员站长
2022/07/23
3.5K0
键值对操作
C#获取url中参数键值对的方法建议收藏
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/120772.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/15
1.7K0
键值对RDD数据分区
所以主要了解HashPartitioner分区器,RangePartitioner分区器及自定义分区器。
用户1483438
2022/05/06
2.3K0
【Python】字典 dict ② ( 字典常用操作 | 字典 新增 / 更新 键值对元素 | 字典 删除 键值对元素 | 字典 清空 键值对元素 )
上面的语法 , 就是向 字典变量 中添加新的 键值对元素 键Key: 值Value ;
韩曙亮
2023/10/11
3310
5 spark入门键值对foldByKey
可以看到,第一个参数是zeroValue,这个就是用来对原始的V做合并操作的,后面的参数是一个JFunction操作。
天涯泪小武
2019/01/17
1.2K0
Spark笔记8-键值对RDD
键值对RDD 创建 从数据中进行加载生成键值对RDD lines = sc.textFile("word.txt") pairRDD = lines.flatMap(lambda line: line.split(" ")) \ # 将数据先进行分割split,再拍平flat,形成单个的元素 .map(lambda word:(word, 1)) # 单个元素和1组成元组的形式,键值对RDD pairRDD.foreach(print) ("hadoop", 1) ("sp
皮大大
2021/03/02
8490
Java对List列表进行分组处理(对List列表固定分组/对List列表平均分组)
将一组数据平均分成n组 即:数据分组数固定为N,每组数据个数不定,每组个数由List列表数据总长度决定 /** * 将一组数据平均分成n组 * * @param source 要分组的数据源 * @param n 平均分成n组 * @param <T> * @return */ public static <T> List<List<T>> averageAssign(List<T> source, int n) { List<List<T>> result = new Ar
目的地-Destination
2023/03/06
3.5K0
stream的分组_java快速对list分组
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/10
1.4K0
RDD操作—— 键值对RDD(Pair RDD)
“键值对”是一种比较常见的RDD元素类型,分组和聚合操作中经常会用到。 Spark操作中经常会用到“键值对RDD”(Pair RDD),用于完成聚合计算。普通RDD里面存储的数据类型是Int、String等,而“键值对RDD”里面存储的数据类型是“键值对”。
羊羽shine
2019/08/21
3K0
[翻译]Android教程-保存数据-保存键值对
http://developer.android.com/training/basics/data-storage/index.html
LeoXu
2018/08/15
2.6K0
Redis中存储亿级键值对
迁移系统时,有时你必须建立一个小脚手架。我们最近不得不这样做:在Instagram上,于遗留原因,我们需要将大约3亿张照片映射到创建它们的用户的ID,以便了解要查询的分片(请参阅有关我们的更多信息)分片设置)。虽然所有客户端和API应用程序都已更新并向我们返回 完整信息,但仍有许多人缓存的旧数据。我们需要一个解决方案:
银河1号
2019/05/15
1.6K0
angularjs-解析分组的json
... and a need parse that JSON to an HTML structure like this, with or without Jquery.
w4979的博客
2020/05/20
6820
【说站】python字典如何删除键值对
以上就是python字典删除键值对的方法,希望对大家有所帮助。更多Python学习指路:python基础教程
很酷的站长
2022/11/23
3.4K0
【说站】python字典如何删除键值对
4 spark入门键值对聚合操作combineByKey
combineByKey是spark中一个核心的高级函数,其他多个键值对函数都是用它来实现的,如groupByKey,reduceByKey等等。
天涯泪小武
2019/01/17
1.8K0
根据分组依据对Java集合元素进行分组
业务背景:在项目中有个“分账”功能,就是支付的钱一部分要根据不同商品的分账金额自动分给平台提供商。
张张
2019/12/25
2.4K0

相似问题

按计数分组,输出到键值对JSON结果

21

按jquery键值对json排序

11

按数组键值对JSON进行排序

35

熊猫-按数据框架分组创建关键值对

34

按值对JSON进行分组

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

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