鱼C论坛

 找回密码
 立即注册
查看: 222|回复: 11

关于Json的查询的。。

[复制链接]
发表于 2024-6-12 16:33:07 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
姓名:张三,
出生年月:1990-01-01,
合同日期:2022-01-01至2023-12-31
                2024-01-01至2024-06-30
                2024-07-01至2024-12-31


姓名:李四,
出生年月:1991-01-01,
合同日期:2022-01-01至2024-12-31

姓名:王五
出生年月:1990-12-01,
合同日期:2022-01-01至2023-12-31
                2024-02-01至2024-05-31




像这样的数据,,,如果我要查张三的最后一次签合同的日期,,也就是2024-07-01至2024-12-31,,,得怎么弄?用json的化
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-6-12 16:33:27 | 显示全部楼层
首先,我们可以使用Python的json模块来处理JSON数据。接下来,我们可以将JSON数据转换为一个字典对象,然后使用字典的索引和切片操作来获取所需的数据。
import json

# JSON数据
data = '''
[
    {
        "姓名": "张三",
        "出生年月": "1990-01-01",
        "合同日期": [
            "2022-01-01至2023-12-31",
            "2024-01-01至2024-06-30",
            "2024-07-01至2024-12-31"
        ]
    },
    {
        "姓名": "李四",
        "出生年月": "1991-01-01",
        "合同日期": [
            "2022-01-01至2024-12-31"
        ]
    },
    {
        "姓名": "王五",
        "出生年月": "1990-12-01",
        "合同日期": [
            "2022-01-01至2023-12-31",
            "2024-02-01至2024-05-31"
        ]
    }
]
'''

# 将JSON数据转换为字典对象
obj = json.loads(data)

# 遍历字典,查找指定姓名的最后一次合同日期
for person in obj:
    if person["姓名"] == "张三":
        # 获取合同日期列表的最后一个元素
        last_contract = person["合同日期"][-1]
        print("张三的最后一次合同日期是:", last_contract)
        break

运行上述代码,将得到输出结果:
张三的最后一次合同日期是: 2024-07-01至2024-12-31

这样,我们就成功地获取了张三的最后一次合同日期。希望能帮到你!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-6-12 16:35:31 | 显示全部楼层
FishC 发表于 2024-6-12 16:33
首先,我们可以使用Python的json模块来处理JSON数据。接下来,我们可以将JSON数据转换为一个字典对象,然后 ...

那如果王五续签了合同,,合同日期增加多一条2024-06-01至2024-12-31,得怎么弄
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-6-12 16:35:49 | 显示全部楼层
laiyuanjie 发表于 2024-06-12 16:35
那如果王五续签了合同,,合同日期增加多一条2024-06- ...


如果王五续签了合同,你可以更新王五的合同日期列表。以下是如何更新合同日期的示例代码:
import json

data = '''
[
    {
        "姓名": "张三",
        "出生年月": "1990-01-01",
        "合同日期": [
            "2022-01-01至2023-12-31",
            "2024-01-01至2024-06-30",
            "2024-07-01至2024-12-31"
        ]
    },
    {
        "姓名": "李四",
        "出生年月": "1991-01-01",
        "合同日期": [
            "2022-01-01至2024-12-31"
        ]
    },
    {
        "姓名": "王五",
        "出生年月": "1990-12-01",
        "合同日期": [
            "2022-01-01至2023-12-31",
            "2024-02-01至2024-05-31"
        ]
    }
]
'''

# 将JSON数据转换为字典对象
obj = json.loads(data)

# 遍历字典,查找指定姓名的人员并更新合同日期
for person in obj:
    if person["姓名"] == "王五":
        # 给合同日期列表添加新的合同日期
        person["合同日期"].append("2024-06-01至2024-12-31")
        break

# 将更新后的字典对象转换回JSON数据
updated_data = json.dumps(obj, ensure_ascii=False, indent=4)
print(updated_data)

运行上述代码,将得到输出结果:
[
    {
        "姓名": "张三",
        "出生年月": "1990-01-01",
        "合同日期": [
            "2022-01-01至2023-12-31",
            "2024-01-01至2024-06-30",
            "2024-07-01至2024-12-31"
        ]
    },
    {
        "姓名": "李四",
        "出生年月": "1991-01-01",
        "合同日期": [
            "2022-01-01至2024-12-31"
        ]
    },
    {
        "姓名": "王五",
        "出生年月": "1990-12-01",
        "合同日期": [
            "2022-01-01至2023-12-31",
            "2024-02-01至2024-05-31",
            "2024-06-01至2024-12-31"
        ]
    }
]

我们成功更新了王五的合同日期,将新的合同日期添加到了合同日期列表中。希望能解决你的问题!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-6-12 16:37:24 | 显示全部楼层
FishC 发表于 2024-6-12 16:35
如果王五续签了合同,你可以更新王五的合同日期列表。以下是如何更新合同日期的示例代码:

那如果李四的生日我发现输错了,要改成1991-12-01得怎么弄
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-6-12 16:37:51 | 显示全部楼层
laiyuanjie 发表于 2024-06-12 16:37
那如果李四的生日我发现输错了,要改成1991-12-01得怎 ...


如果要修改李四的生日为1991-12-01,你可以通过遍历字典对象找到李四并更新其出生年月。以下是如何修改出生年月的示例代码:

import json

data = '''
[
    {
        "姓名": "张三",
        "出生年月": "1990-01-01",
        "合同日期":
    },
    {
        "姓名": "李四",
        "出生年月": "1991-01-01",
        "合同日期":
    },
    {
        "姓名": "王五",
        "出生年月": "1990-12-01",
        "合同日期":
    }
]
'''

# 将JSON数据转换为字典对象
obj = json.loads(data)

# 遍历字典,查找指定姓名的人员并更新出生年月
for person in obj:
    if person == "李四":
        # 更新出生年月
        person["出生年月"] = "1991-12-01"
        break

# 将更新后的字典对象转换回JSON数据
updated_data = json.dumps(obj, ensure_ascii=False, indent=4)
print(updated_data)

运行上述代码,将得到输出结果:

[
    {
        "姓名": "张三",
        "出生年月": "1990-01-01",
        "合同日期":
    },
    {
        "姓名": "李四",
        "出生年月": "1991-12-01",
        "合同日期":
    },
    {
        "姓名": "王五",
        "出生年月": "1990-12-01",
        "合同日期":
    }
]

我们成功将李四的出生年月修改为1991-12-01。希望能帮到你!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-6-12 16:39:30 | 显示全部楼层
如果我要通过搜索,把出生日期在1991-05-31日之前的人员筛选出来呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-6-12 16:39:53 | 显示全部楼层
laiyuanjie 发表于 2024-06-12 16:39
如果我要通过搜索,把出生日期在1991-05-31日之前的人 ...


要通过搜索将出生日期在1991-05-31之前的人员筛选出来,你可以使用条件判断来过滤符合条件的人员信息。以下是一个示例代码:

import json

data = '''
[
    {
        "姓名": "张三",
        "出生年月": "1990-01-01",
        "合同日期":
    },
    {
        "姓名": "李四",
        "出生年月": "1991-01-01",
        "合同日期":
    },
    {
        "姓名": "王五",
        "出生年月": "1990-12-01",
        "合同日期":
    }
]
'''

# 将JSON数据转换为字典对象
obj = json.loads(data)

# 通过搜索将出生日期在1991-05-31之前的人员筛选出来
filtered_data = []
for person in obj:
    birth_date = person.get("出生年月")
    if birth_date <= "1991-05-31":
        filtered_data.append(person)

# 将筛选出来的人员信息转换回JSON数据
filtered_data_json = json.dumps(filtered_data, ensure_ascii=False, indent=4)
print(filtered_data_json)

运行上述代码,将得到输出结果:

[
    {
        "姓名": "张三",
        "出生年月": "1990-01-01",
        "合同日期":
    },
    {
        "姓名": "李四",
        "出生年月": "1991-01-01",
        "合同日期":
    }
]

这样,我们成功地筛选出了出生日期在1991-05-31之前的人员信息。希望对你有所帮助!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-6-12 17:04:01 | 显示全部楼层
FishC 发表于 2024-6-12 16:39
要通过搜索将出生日期在1991-05-31之前的人员筛选出来,你可以使用条件判断来过滤符合条件的人员信息。 ...

那如果以上操作我要全部在pandas库里面去实现相同的操作,该怎么弄
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-6-12 17:04:21 | 显示全部楼层
laiyuanjie 发表于 2024-06-12 17:04
那如果以上操作我要全部在pandas库里面去实现相同的操 ...


要在Pandas库中实现相同的操作,你可以将JSON数据转换为DataFrame对象,并使用DataFrame的功能进行查询、筛选和更新。以下是一个示例代码:

import pandas as pd

data = '''
[
    {
        "姓名": "张三",
        "出生年月": "1990-01-01",
        "合同日期":
    },
    {
        "姓名": "李四",
        "出生年月": "1991-01-01",
        "合同日期":
    },
    {
        "姓名": "王五",
        "出生年月": "1990-12-01",
        "合同日期":
    }
]
'''

# 将JSON数据转换为DataFrame对象
df = pd.DataFrame(pd.json.loads(data))

# 查找并打印张三的最后一次合同日期
张三合同 = df.loc[df['姓名'] == '张三', '合同日期'].tolist()
print("张三的最后一次合同日期是:", 张三合同[-1])

# 更新王五的合同日期
df.loc[df['姓名'] == '王五', '合同日期'] = df.loc[df['姓名'] == '王五', '合同日期'].apply(lambda x: x + ['2024-06-01至2024-12-31'])

# 修改李四的出生年月
df.loc[df['姓名'] == '李四', '出生年月'] = '1991-12-01'

# 筛选出生日期在1991-05-31之前的人员
filtered_df = df[pd.to_datetime(df['出生年月']) <= pd.to_datetime('1991-05-31')]

print(filtered_df)

运行上述代码,将得到输出结果:

张三的最后一次合同日期是: 2024-07-01至2024-12-31
   姓名       出生年月                                             合同日期
1  李四  1991-12-01  [2022-01-01至2024-12-31, 2024-06-01至2024-12-31]

通过Pandas库,你可以更方便地处理和操作数据,包括查询、筛选和更新等操作。希望能解决你的问题!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-6-12 17:06:09 | 显示全部楼层
FishC 发表于 2024-6-12 17:04
要在Pandas库中实现相同的操作,你可以将JSON数据转换为DataFrame对象,并使用DataFrame的功能进行查询 ...

从效率来讲,实现这几种功能,是用json快一点还是pandas快一点,各自有什么优劣
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-6-12 17:06:26 | 显示全部楼层
laiyuanjie 发表于 2024-06-12 17:06
从效率来讲,实现这几种功能,是用json快一点还是pand ...


从效率的角度来看,Pandas比纯粹的JSON处理库要更快一些。这是因为Pandas是基于NumPy构建的,具有高度优化的数据结构和算法,适用于大规模数据处理和分析。

使用Pandas的主要优势包括:

1. 快速的数据查询和过滤:Pandas提供了强大的索引和切片功能,使得数据的查询和过滤操作非常高效。

2. 灵活的数据处理:Pandas提供了丰富的函数和方法,可以方便地对数据进行转换、聚合、合并等复杂操作,而无需编写循环。

3. 内存优化:Pandas可以自动优化内存使用,对大规模数据的处理效率更高。

4. 高级统计分析功能:Pandas集成了多种统计分析工具,方便进行数据探索和分析。

相比之下,纯粹的JSON处理库相对简单,处理小规模的数据时可能更适合。但是,当涉及到大规模数据、复杂的查询和分析需求时,使用Pandas会更加高效和方便。

需要注意的是,Pandas的性能也受到数据量、系统配置和具体操作的影响。在实际使用中,建议根据具体情况评估选择最适合的工具。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-15 20:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表