为了账号安全,请及时绑定邮箱和手机立即绑定

如何创建 json 限制?(不和谐)

如何创建 json 限制?(不和谐)

MMTTMM 2022-11-09 16:27:21
因此,在限制和解析为 json 时,我一直在努力提高我的知识。我会在代码之后解释更多。测试数据(两种不同的测试数据):{    'sizes': ['EUR 40', 'EUR 40 2/3', 'EUR 41 1/3', 'EUR 42', 'EUR 42 2/3', 'EUR 43 1/3', 'EUR 44'],}---------------------------------------------------------------------{    'sizes': [{        'atc': 'https://test.com&token=e4d64f25476dcee4b08744d382dc405b&ipa=176877',        'size': 'EU 36 - [1]'    }, {        'atc': 'https://test.com&token=e4d64f25476dcee4b08744d382dc405b&ipa=176878',        'size': 'EU 36.5 - [1]'    }, {        'atc': 'https://test.com&token=e4d64f25476dcee4b08744d382dc405b&ipa=176879',        'size': 'EU 37.5 - [3]'    }, {        'atc': 'https://test.com&token=e4d64f25476dcee4b08744d382dc405b&ipa=176880',        'size': 'EU 38 - [6]'    }, {        'atc': 'https://test.com&token=e4d64f25476dcee4b08744d382dc405b&ipa=176881',        'size': 'EU 38.5 - [7]'    }, {        'atc': 'https://test.com&token=e4d64f25476dcee4b08744d382dc405b&ipa=176882',        'size': 'EU 39 - [8]'    }, {        'atc': 'https://test.com&token=e4d64f25476dcee4b08744d382dc405b&ipa=176883',        'size': 'EU 40 - [6]'    }, {        'atc': 'https://test.com&token=e4d64f25476dcee4b08744d382dc405b&ipa=176884',        'size': 'EU 40.5 - [5]'    }, {        'atc': 'https://test.com&token=e4d64f25476dcee4b08744d382dc405b&ipa=176885',        'size': 'EU 41 - [11]'    }, {        'atc': 'https://test.com&token=e4d64f25476dcee4b08744d382dc405b&ipa=176886',        'size': 'EU 42 - [11]'    }, {        'atc': 'https://test.com&token=e4d64f25476dcee4b08744d382dc405b&ipa=176887',        'size': 'EU 42.5 - [17]'    }在这里,我可能会发生 2 个不同的场景问题:不和谐嵌入的限制是 1028 个字符。这意味着如果一个嵌入超过 1028 个字符,由于不和谐的限制,它将无法发送到不和谐。此外,您可以看到有两种不同的尺寸。一个没有ATC,一个有ATC。所以我正在尝试用 atc 创建一个新列表和一个没有 atc 的新列表(第一次尝试除了代码)但是,我对这段代码感觉不够舒服,因为如果链接超长,它仍然会失败,并且它总是会超过 1028 个字符,这将无法打印出来。所以我的问题是,我怎样才能改进并确保我制作了一个“安全”的嵌入帖子
查看完整描述

1 回答

?
白猪掌柜的

TA贡献1893条经验 获得超10个赞

让我们逐个看一下:

try:

    sizes = []

    for size in product.get('sizes'):

        if size.get('atc'):

            sizes.append('<{}|{}>'.format(size.get('atc'), size.get('size')))

        else:

            sizes.append(size.get('size'))


    product['sizes'] = sizes

except Exception:

    pass

你真的没有任何地方可以抛出异常,除了size in product.get,它可能无法迭代None。


product['sizes'] = sizes = []

for size in product.get('sizes', ()):

    sizes.append((size.get('size'), size.get('atc'))

sizelist = []

for i in (i for i in product['sizes'] if i not in sizelist):

    sizelist.append(i)

让我们尝试将“atc”添加到没有它的任何东西


atc_for_size = {}

for size, atc in sizes:

    atc_for_size.setdefault(size, atc)  # Keeps first found

sizelist = sorted(atc_for_size.items())

characterCount, i = 0, 0

for j, item in enumerate(sizelist):


    if len(item) + characterCount > 900:

        data['attachments'][0]['fields'].append(

            {

                'title': 'Sizes',

                'value': '\n'.join(sizelist[i:j]) if len(sizelist) else '*Sizes not found*',

                'short': True

            }

        )

        characterCount, i = len(item), j

    else:

        characterCount += len(item)

if characterCount:

    data['attachments'][0]['fields'].append(

        {

            'title': 'Sizes',

            'value': '\n'.join(sizelist[i:]) if len(sizelist) else '*Sizes not found*',

            'short': True

        }

    )

您在这里尝试做什么并不明显,您在帖子中提到字符有 1028 个限制,所以您需要尽可能多地适应?


如果 1028 限制是针对整个数据对象的,则您需要进行一些约束求解,并决定您是否宁愿只拥有不适合的尺寸,或者尽可能多地使用尺寸 + url,或者全部尺寸,最有可能的尺寸的 url 等等。如果不知道您在这里想要的行为,就没有通用的解决方案。


如果您只需要将其分成足够小的块,那么您可以保留上面的逻辑,并在添加之前检查它是否会使其太长。


请注意,此时sizelistcontains (size, url_or_None),而不是格式化的字符串,因此当您决定是否要包含 url 时,您需要重新引入该格式。


查看完整回答
反对 回复 2022-11-09
  • 1 回答
  • 0 关注
  • 98 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信