【问题标题】:github api "message":"Problems parsing JSON" for large Base64 stringgithub api "message":"Problems parblems parsing JSON" for large Base64 string
【发布时间】:2021-05-30 08:35:30
【问题描述】:

我正在尝试学习使用 Java 中的 guthub api。 我创建了一个简单的程序,可以读取和提交文件的新版本。 我已经针对许多短长度的文本文件对此进行了测试,并且我认为我正确使用了 mime base64。 我现在正在尝试上传一个更大的文件,大约 5 MB。 这意味着正文中的 JSON 看起来像这样:

{
"owner": "example42gdrive",
"repo": "Example1",
"message": "FileSystem 42 module on github",
"content": "rO0ABXNyABdpcy5MNDIuZ2V ...5MB of JS string here... ABGluZm90AB5MfqIDcQB+AAU=",
"sha":"a7ef93d3eb50383028578cb916b70060067d9c8a"
}

然后我会回复

400
{"message":"Problems parsing JSON","documentation_url":"https://docs.github.com/rest/reference/repos#create-or-update-file-contents"}

注意事项:

  • 相同的代码适用于较小的内容

  • java Base64.getMimeEncoder() 将在结果中插入一些 \n 以将其分隔成行。我正在删除这些换行符以获得有效的 JS 字符串。

有谁知道我做错了什么或者我应该怎么做?

编辑:经过一些实验,问题接缝在 \n: 如果我生成的 base64 字符串足够短,以至于 java Base64.getMimeEncoder() 不会插入任何 \n,那么一切都很好。当然,带有\n的字符串不能通过简单的前后加(")来'stringyfied',所以我尝试了

  • 删除\n,无效 -> 解析 JSON 时出现问题
  • 用 \n 替换 \n(以便解析器将它们视为字符串中的 \n)-> 解析 JSON 时出现问题
  • 将 \n 替换为 \\n(以便解析器将它们视为 \n,如果在某种程度上存在两个级别的转义服务器端,这可能会有所帮助 ->解析 JSON 的问题
  • 用空格替换 \n ->解析 JSON 的问题

https://en.wikipedia.org/wiki/Base64 维基百科明确指出

(newlines and white spaces may be present anywhere but are to be ignored
 on decoding)

我开始认为有些东西我不明白,而且很明显,github api 没有提到它

【问题讨论】:

    标签: json github-api


    【解决方案1】:

    好的,我做到了。 我通过阅读间接找到了答案

    Java 8 Base64 Encode (Basic) doesn't add new line anymore. How can I reimplement this?

    基本上,只要看着屏幕,我就相信“换行符”只是“\n”,而不是“\r\n”。因此,我只替换了“\n”,留下了“\r”。 将 "\r\n" 替换为 "" 有效。 但是,将“\r\n”替换为“\r\n”不会。这表明 github 解码器中存在错误(如果 wikipedia 正确且必须允许换行)

    我讨厌这个!我讨厌我们有不止一种表达“新行”的方式,而且在大多数情况下,它们以图形方式呈现!!!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-24
      • 2021-06-09
      • 2021-03-13
      • 1970-01-01
      • 2016-09-18
      • 2018-12-19
      • 1970-01-01
      相关资源
      最近更新 更多