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

因此,在限制和解析为 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 个不同的场景问题:

  1. 不和谐嵌入的限制是 1028 个字符。这意味着如果一个嵌入超过 1028 个字符,由于不和谐的限制,它将无法发送到不和谐。

  2. 此外,您可以看到有两种不同的尺寸。一个没有ATC,一个有ATC。所以我正在尝试用 atc 创建一个新列表和一个没有 atc 的新列表(第一次尝试除了代码)

但是,我对这段代码感觉不够舒服,因为如果链接超长,它仍然会失败,并且它总是会超过 1028 个字符,这将无法打印出来。

所以我的问题是,我怎样才能改进并确保我制作了一个“安全”的嵌入帖子



MMTTMM
浏览 99回答 1
1回答

白猪掌柜的

让我们逐个看一下:try:&nbsp; &nbsp; sizes = []&nbsp; &nbsp; for size in product.get('sizes'):&nbsp; &nbsp; &nbsp; &nbsp; if size.get('atc'):&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sizes.append('<{}|{}>'.format(size.get('atc'), size.get('size')))&nbsp; &nbsp; &nbsp; &nbsp; else:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sizes.append(size.get('size'))&nbsp; &nbsp; product['sizes'] = sizesexcept Exception:&nbsp; &nbsp; pass你真的没有任何地方可以抛出异常,除了size in product.get,它可能无法迭代None。product['sizes'] = sizes = []for size in product.get('sizes', ()):&nbsp; &nbsp; sizes.append((size.get('size'), size.get('atc'))sizelist = []for i in (i for i in product['sizes'] if i not in sizelist):&nbsp; &nbsp; sizelist.append(i)让我们尝试将“atc”添加到没有它的任何东西atc_for_size = {}for size, atc in sizes:&nbsp; &nbsp; atc_for_size.setdefault(size, atc)&nbsp; # Keeps first foundsizelist = sorted(atc_for_size.items())characterCount, i = 0, 0for j, item in enumerate(sizelist):&nbsp; &nbsp; if len(item) + characterCount > 900:&nbsp; &nbsp; &nbsp; &nbsp; data['attachments'][0]['fields'].append(&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'title': 'Sizes',&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'value': '\n'.join(sizelist[i:j]) if len(sizelist) else '*Sizes not found*',&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'short': True&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; )&nbsp; &nbsp; &nbsp; &nbsp; characterCount, i = len(item), j&nbsp; &nbsp; else:&nbsp; &nbsp; &nbsp; &nbsp; characterCount += len(item)if characterCount:&nbsp; &nbsp; data['attachments'][0]['fields'].append(&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'title': 'Sizes',&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'value': '\n'.join(sizelist[i:]) if len(sizelist) else '*Sizes not found*',&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'short': True&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; )您在这里尝试做什么并不明显,您在帖子中提到字符有 1028 个限制,所以您需要尽可能多地适应?如果 1028 限制是针对整个数据对象的,则您需要进行一些约束求解,并决定您是否宁愿只拥有不适合的尺寸,或者尽可能多地使用尺寸 + url,或者全部尺寸,最有可能的尺寸的 url 等等。如果不知道您在这里想要的行为,就没有通用的解决方案。如果您只需要将其分成足够小的块,那么您可以保留上面的逻辑,并在添加之前检查它是否会使其太长。请注意,此时sizelistcontains (size, url_or_None),而不是格式化的字符串,因此当您决定是否要包含 url 时,您需要重新引入该格式。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python