如何在JSON中存储食谱?现有写法是否存在更优实现方案?
首先先纠正你写法里的两个基础问题:
- 你给出的示例是JavaScript对象,不是标准JSON格式。如果要存储为标准JSON,需要满足键用双引号包裹、字符串用双引号、不能保留尾逗号、换行统一用转义符
\n,不能直接在字符串里写换行。 - 换行转义符是反斜杠加n即
\n,你写的/n是错误写法。
直接在字符串里存储转义换行符的合理性
这种做法完全合理,是JSON标准支持的通用处理方式,适合仅需纯文本展示的简单场景,实现成本极低。渲染时只要给元素加white-space: pre-line的CSS属性,或者把字符串里的\n替换为<br>标签,就能正常展示换行效果。
如果有更复杂的需求,可以参考以下更适配场景的处理方案:
方案1:结构化数组存储(推荐需要单独操作内容的场景)
如果后续需要对步骤、食材做单独处理,比如给步骤加勾选状态、单独修改某一项食材、统计步骤数量等,建议把多行内容拆分为字符串数组存储:
{ "id": 1, "title": "欧姆蛋", "recipe": [ "Do something", "Do something else", "Do something else after that", "Do something else after that" ], "ingredients": [ "Ingredient1", "Ingredient2", "Ingredient3" ], "date": "" }
- 优势:结构化程度高,后续操作单个条目不需要做字符串切割,扩展性强
- 劣势:纯文本展示场景下需要循环输出数组,比直接渲染字符串多一点代码量
方案2:Markdown格式存储(推荐需要富文本效果的场景)
如果食谱需要支持加粗、列表、图片等富文本效果,可以直接把内容存为Markdown格式的字符串,后续用Markdown解析器渲染即可,天然支持换行、格式标记,不需要额外做格式兼容。
方案3:JS场景用模板字符串简化写法
如果你只是在JavaScript代码里定义对象不需要转成标准JSON存储,可以直接用反引号包裹的模板字符串,不用手动写\n就能支持多行内容:
const recipe = { id: 1, title: '欧姆蛋', recipe: `Do something Do something else Do something else after that Do something else after that`, ingredients: `Ingredient1 Ingredient2 Ingredient3`, date: '' }
选择建议
- 仅需纯文本展示:直接存带
\n的字符串即可,完全符合规范 - 需要单独操作步骤/食材条目:优先选数组存储方案
- 需要富文本展示:选Markdown存储方案
内容的提问来源于stack exchange,提问作者user11092881
相关产品推荐
相关产品推荐

