Golang中如何将给定输入转换为JSON格式

Golang中如何将给定输入转换为JSON格式 输入内容来自文本文件: 待探索的主题 鸟类 物种 描述 黑色 动物 物种 描述 黑色

输出应为给定输入对应的JSON格式。

注意:根据输入文本文件的内容,只应显示鸟类或动物中的一项。

17 回复

是的,正确

更多关于Golang中如何将给定输入转换为JSON格式的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


那就写代码。一旦它失败了,我们可以帮你修复。我们不会替你完成作业。

你在这里使用了列表,什么样的输入会导致不止一个条目?

输入的格式规范是什么?

你已有的代码是什么?

它的行为与你期望的有什么不同?

请帮助我们帮助你!

我没有被要求使用的代码,需要使用映射和切片。我真的很需要实现这个的方法。请好心提供代码帮助。我没有其他信息可以提供了。

能否提供两个您输入文本CSV文件的示例? 如果我的理解正确,根据给定的输入:输出应该是一个JSON文件吗?

请查看这个示例:Go Playground - The Go Programming Language

示例输出 1- 待探索主题 { “Birds:” { “Species”, “Description:” “Black” } } 示例输出 2- 待探索主题 { “Animals:” { “Species:”, “Description:” “Black” } }

希望这能有所帮助

样本输入 1- 探索主题 鸟类 物种 描述 黑色

样本输入 2- 探索主题 动物 物种 描述 黑色

对于给定的输入,输出应为 JSON 格式,使用包名 kingdom 而非 package mainfunc main

示例 JSON 输出 1-

{
"Topics to explore": [
{
"Birds": [
"Species",
"Description Black"
]
}
]
}

示例 JSON 输出 2-

{
"Topics to explore": [
{
"Animals": [
"Species",
"Description Black"
]
}
]
}

这仍然不是有效的JSON,甚至都不能勉强看作是有效的JSON……

而且你仍然没有展示你到目前为止尝试了什么,或者你的具体问题在哪里。

你是对打开和读取输入文件感到困难吗?

是写入输出文件的问题吗?

是将输入转换为你的内部表示形式?

还是将内部表示形式转换为JSON?

输入文件的规则是什么?数据格式是如何指定的?

在JSON中它需要是什么样子?

仅仅将输入文件的文本用引号包裹起来,并将换行符替换为字面量 \n 就可以使其成为有效的JSON。但这可能不是你需要的。

此外,如果你展示一些代码来说明你当前的状况,并解释它实际做了什么而不是它应该做什么,会增加你得到回答的机会。

Gau_ty:

我希望这能有所帮助

不,这并没有帮助,因为那段JSON在语法上是无效的。

此外,每当你想展示一些代码片段时,请使用Markdown围栏代码块或者额外缩进4个空格。

```json
{"foo": 1}
{"foo": 1}

将被渲染为:

```json
{"foo": 1}
{"foo": 1}

是的,只有一个名为 inpu.txt 的输入文件和一个名为 output.json 的输出文件。

关于后面的部分,鸟类或动物并不是固定的,它们也可以变成其他东西,比如人类。所以基本的想法是使用 mammals map[string][]string 并将其作为字典与切片一起存储。

类似这样:

Mammals : {
    "Human" :{
        Species,
        Description Black,
        Blaha blaha
    },
    以此类推
}

是的,你的输入和输出是正确的。输入是一个 .txt 格式的文件,输出是一个 .json 格式的文件。 我会尝试编写代码,以下是它应该如何运作的伪代码:

Package Kingdom
import( necessary import files.
)
Const comand =“Topics to explore”
Type output struct{
Unpaarsedlines []string `json:"unpaarsedlines,omiempty"`
Mammals map[string][] `json:"mammals"`
}

这个 mammals 应该包含鸟类和动物。

输入的特点是它可能会增加,不是固定的。例如: 示例输入 1- Topics to explore Birds Blaha blaha

示例输入 2- Topics to to explore Birds Species Description Black Blaha. Blaha

示例输入 3- Topics to explore Animals Blah blah Description Black Blah blah

是的,你的输入和输出是正确的。输入是一个 .txt 格式的文件,输出是一个 .json 格式的文件。

  1. 在我的问题中,我问的是输入和输出是否是分开的文件,但你的回答似乎暗示输入和输出各是单个文件。那么,是有一个输入文件和一个输出文件吗?

  2. 如果是这样,在我看来,输入文件中每条记录之间的分隔符是“Sample input n-”,其中 n 是一个递增的数字。是这样吗?

  3. 你能详细说明一下这个结构体:

    Type output struct{
    Unpaarsedlines []string json:"unpaarsedlines,omiempty"
    Mammals map[string][] json:"mammals"
    }
    

    和你的示例 JSON 之间的关系吗?

    {
      "Topics to explore": [
        {
          "Animals": [
            "Species",
            "Description Black"
          ]
        }
      ]
    }
    

    看起来 { "Animals": [ ... ] } 这部分可能对应 output 结构体中的 Mammals 字段,但类型定义不完整:你写了 map[string][] ← 但这里需要一个类型名称。

那么,听起来如果你的 input.txt 文件完全如下所示:

Sample input 1-
Topics to explore
Birds
Blaha blaha

Sample input 2-
Topics to to explore
Birds
Species
Description Black
Blaha. Blaha

Sample input 3-
Topics to explore
Animals
Blah blah
Description Black
Blah blah

那么你希望 output.json 完全像这样:

{
  "Topics to explore": [
    {
      "Birds": [
        "Blaha blaha",
        "Species",
        "Description Black",
        "Blaha. Blaha"
      ],
      "Animals": [
        "Blah blah",
        "Description Black",
        "Blah blah"
      ]
    }
  ]
}

我的假设是,如果你有两个 Sample input n- 部分,它们在“Topics to explore”下拥有相同的“键”(例如“Birds”、“Animals”等),那么后续的值(“Species”、“Description Black”等)应该被追加进去。例如,你的“Sample input 1-”和“Sample input 2-”部分都提到了“Birds”,所以我假设第1部分的值“Blaha blaha”应该排在前面,而第2部分的值:“Species”、“Description Black”和“Blaha. Blaha”应该追加在后面。

这样理解对吗?

首先:据我理解,您有几个文本文件,例如:

示例输入 1.txt

Topics to explore
Birds
Species
Description Black

示例输入 2.txt

Topics to explore
Animals
Species
Description Black

并且您希望将每个文本文件转换为单独的 JSON 文件,例如:

示例 JSON 输出 1.json

{
  "Topics to explore": [
    {
      "Birds": [
        "Species",
        "Description Black"
      ]
    }
  ]
}

示例 JSON 输出 2.json

{
  "Topics to explore": [
    {
      "Animals": [
        "Species",
        "Description Black"
      ]
    }
  ]
}

是这样吗?

其次:这个网站上不太可能有人会编写一个完整的程序来解决您的整个问题并直接给您。有其他网站可以付费请人代劳,但网站成员的目标是引导您,以便您能(主要)自己解决问题。

考虑到这个目标,目前我对您的建议是:

  1. 请确认输入(单独的 .txt 文件?)和输出(单独的 .json 文件?)的格式。确切知道您从什么开始以及想要得到什么结果,将有助于我们更好地指导您。

  2. 写下代码为实现您的目标需要执行的步骤。您不必用 Go 语言写下来;可以使用“伪代码”或英语,或任何您觉得舒适的语言。

  3. 尝试为每个步骤编写代码。如果您遇到困难,此时论坛的成员将能够更直接地帮助您,甚至可能提供代码。例如:

    新问题:“我有多个 .txt 文件,如 ‘sample input 1.txt’、‘sample input 2.txt’ 等,我想在一个循环中打开每个文件,但我不知道可能有多少个。可能多达 ‘sample input 10.txt’ 或 ‘sample input 100000.txt’。我如何找到所有文件?这是我目前的代码:…”

    对于这样的问题,您可能会收到论坛上几位成员的多个回答,其中一些回答可能包含代码。这个问题并非要求他人为您编写代码;而是在您思考问题并遇到困难后,寻求指导

根据输入内容,这是一个嵌套的JSON结构。以下是实现代码:

package main

import (
	"encoding/json"
	"fmt"
	"strings"
)

type Animal struct {
	Species   string `json:"物种"`
	Description string `json:"描述"`
}

type Category struct {
	Birds   *Animal `json:"鸟类,omitempty"`
	Animals *Animal `json:"动物,omitempty"`
}

func main() {
	// 模拟从文本文件读取的输入
	input := `鸟类
物种
描述 黑色`

	lines := strings.Split(input, "\n")
	var result Category
	
	for i := 0; i < len(lines); i++ {
		line := strings.TrimSpace(lines[i])
		
		if line == "鸟类" {
			animal := &Animal{}
			// 读取物种
			if i+1 < len(lines) && strings.TrimSpace(lines[i+1]) == "物种" {
				i++
				// 读取描述
				if i+1 < len(lines) && strings.HasPrefix(strings.TrimSpace(lines[i+1]), "描述") {
					i++
					animal.Species = "鸟类"
					animal.Description = strings.TrimSpace(strings.TrimPrefix(lines[i], "描述"))
				}
			}
			result.Birds = animal
		} else if line == "动物" {
			animal := &Animal{}
			// 读取物种
			if i+1 < len(lines) && strings.TrimSpace(lines[i+1]) == "物种" {
				i++
				// 读取描述
				if i+1 < len(lines) && strings.HasPrefix(strings.TrimSpace(lines[i+1]), "描述") {
					i++
					animal.Species = "动物"
					animal.Description = strings.TrimSpace(strings.TrimPrefix(lines[i], "描述"))
				}
			}
			result.Animals = animal
		}
	}

	// 转换为JSON
	jsonData, err := json.MarshalIndent(result, "", "  ")
	if err != nil {
		fmt.Println("JSON编码错误:", err)
		return
	}

	fmt.Println(string(jsonData))
}

输出结果:

{
  "鸟类": {
    "物种": "鸟类",
    "描述": "黑色"
  }
}

如果输入是动物:

input := `动物
物种
描述 黑色`

输出结果:

{
  "动物": {
    "物种": "动物",
    "描述": "黑色"
  }
}

这段代码解析文本输入,根据内容动态创建JSON结构,并使用omitempty标签确保只显示存在的类别。

回到顶部