【问题标题】:Save an integer array written in C to a JSON text file array将用 C 编写的整数数组保存到 JSON 文本文件数组
【发布时间】:2015-11-13 16:20:12
【问题描述】:

如何将写入为 c 文件的整数数组保存到 JSON 文本文件数组文件中?任何帮助或链接将不胜感激。

【问题讨论】:

  • JSON 只是一种格式化数据的方式。您可以编写一个函数或寻找一个为您处理一些细节的库。到目前为止,您尝试过什么?
  • 例如int array[] = {1,2,3}; => [ 1, 2, 3 ]{ "array" : [ 1, 2, 3 ] }
  • 我只是想了解如何开始这个过程。我已经学会了如何使用 FILE* f = fopen (filename, "w" );
  • 必须开始使用 json 库编码?
  • 我只是想了解如何开始这个过程。我已经学会了如何使用 FILE* f = fopen (filename, "w" );创建一个标题并使用 fwrite ( header, sizeof(int), 1, filename );然后使用 fwrite( ia->data, sizeof(int), ia->len, f ) 将数据写入二进制 xdr 文件。但是,我只有最模糊的想法如何写入 JSON。命令的顺序是什么?我知道文件必须以方括号开头,每个元素必须用逗号分隔并以方括号结尾。我将不胜感激有关此的一些方向。谢谢

标签: c json xdr


【解决方案1】:

从评论继续。声明数组时,如:

int array[] = { 1, 2, 3, 4, 5, 6, 7, 8 };

该数组存在于内存中,您可以将该数组传递给您的输出函数,该函数会将数组以您指定的格式写入文件。当您将数组传递给函数时,您还需要传递数组的大小。作为参数传递给函数的数组变量被转换为指针。转换后,无法确定函数中原始数组的大小。 (一般意义上)

您需要您的函数做的就是打开一个文件进行写入,在写入数组元素之前写入所需的任何文本,写入数组元素,然后写入所需的任何关闭格式。一个可以帮助您的快速示例可能类似于以下内容,其中将数组值写入命令行上提供的文件名(或 "jsonout.txt" 默认值):

#include <stdio.h>

void jsonout (char *fname, int *a, size_t sz);

int main (int argc, char **argv) {

    int array[] = { 1, 2, 3, 4, 5, 6, 7, 8 };
    size_t size = sizeof array/sizeof *array;
    char *file = argc > 1 ? argv[1] : "jsonout.txt";

    jsonout (file, array, size);

    return 0;
}

/* output function to write "{ "array" : [ v1, v2, .... ] }" to 'fname'
 * where v1, v2, ... are the values in the array 'a' of size 'sz'
 */
void jsonout (char *fname, int *a, size_t sz)
{
    size_t i;
    FILE *fp = fopen (fname, "w+"); /* open file for writing */

    if (!fp) {  /* validate file is open, or throw error */
        fprintf (stderr, "jsonout() error: file open failed '%s'.\n", 
                fname);
        return;
    }

    fprintf (fp, "{ \"array\" : [");    /* print header to file */

    for (i = 0; i < sz; i++)            /* print each integer   */
        if (i == 0)
            fprintf (fp, " %d", a[i]);
        else
            fprintf (fp, ", %d", a[i]);

    fprintf (fp, " ] }\n");     /* print closing tag */

    fclose (fp);
}

输出文件

$ cat jsonout.txt
{ "array" : [ 1, 2, 3, 4, 5, 6, 7, 8 ] }

如果您需要进一步的帮助,请告诉我。

【讨论】:

  • 我看到了所需的 FILE* fp、fprintf 和 f 关闭序列。非常感谢。请问您是否有可变数字数组。如何将其更改为字符串并与左括号和右括号以及适当的逗号连接?非常感谢。
  • 这确实是初学者,但现在我已经弄清楚如何在 int 和逗号之间交替,我如何切断最后一个逗号并在整个内容周围添加方括号。 int main () { char name[] = "foo" "bar";诠释我;字符逗号[] = ","; for ( i=0; i
  • 如果您仔细查看我在函数jsonout 中发布的代码,您会看到我打印fprintf (fp, "{ \"array\" : ["); 以打印{ "array" : [。然后我进入一个循环来打印数组的每个元素。 for (i = 0; i &lt; sz; i++) 用于第一个元素 (i=0) 我打印 " %d"(不带逗号)。对于所有剩余的元素,我打印", %d"(在当前打印的当前之前的最后一个数字后面放置一个逗号)。当循环完成时,我打印结束 ] }。这给出了完整的{ "array" : [ 1, 2, 3, 4, 5, 6, 7, 8 ] } 如果您还有其他问题,请告诉我。
  • 这太棒了。谢谢!
  • 使用 $ cat myJSON.txt 命令我看到文件已成功写入外部存储器。我还将数组的长度添加到文本文件的头部。所以问题是我必须检查 char 数组元素是 "[" 还是 "," 有哪些选项?这两个字符之间将是我的长度,我可以使用它来将文本文件中的其余数字转换为 c 中的整数数组...干杯并感谢您的技巧和时间。
猜你喜欢
  • 2022-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多