Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Creating JSON files from scratch

Creating JSON files from scratch

Scheduled Pinned Locked Moved Solved General and Desktop
jsoncreate
11 Posts 4 Posters 6.4k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • M Offline
    M Offline
    marlenet15
    wrote on 5 May 2016, 18:54 last edited by
    #1

    Is it possible to create a JSON file from scratch? I have been looking everywhere and I couldn't find any examples. I would like to create the example below. The reason is each user will have their own file and there could be many users.

    {
        "USER": {
            "DOB_DAY": "0",
            "DOB_MONTH": "0",
            "DOB_YEAR": "0",
            "FIRST_NAME": "name",
            "GENDER": "gender",
            "LAST_NAME": "last",
            "MIDDLE_INITIAL": "mi",
        },
    
        "PREFERENCES": {
    	"USER_NAME": "username",
    	"COLOR": "color",
    	"CITY": "city",
        }
    }
    K ? 2 Replies Last reply 5 May 2016, 19:32
    0
    • M marlenet15
      5 May 2016, 18:54

      Is it possible to create a JSON file from scratch? I have been looking everywhere and I couldn't find any examples. I would like to create the example below. The reason is each user will have their own file and there could be many users.

      {
          "USER": {
              "DOB_DAY": "0",
              "DOB_MONTH": "0",
              "DOB_YEAR": "0",
              "FIRST_NAME": "name",
              "GENDER": "gender",
              "LAST_NAME": "last",
              "MIDDLE_INITIAL": "mi",
          },
      
          "PREFERENCES": {
      	"USER_NAME": "username",
      	"COLOR": "color",
      	"CITY": "city",
          }
      }
      K Offline
      K Offline
      kshegunov
      Moderators
      wrote on 5 May 2016, 19:32 last edited by
      #2

      @marlenet15
      Hello.

      Is it possible to create a JSON file from scratch?

      How do you mean? You could add placeholders for the values and do QString::replace on them, but really depends on what you want to accomplish. Do you mind elaborating a bit?

      Kind regards.

      Read and abide by the Qt Code of Conduct

      M 1 Reply Last reply 5 May 2016, 19:50
      0
      • K kshegunov
        5 May 2016, 19:32

        @marlenet15
        Hello.

        Is it possible to create a JSON file from scratch?

        How do you mean? You could add placeholders for the values and do QString::replace on them, but really depends on what you want to accomplish. Do you mind elaborating a bit?

        Kind regards.

        M Offline
        M Offline
        marlenet15
        wrote on 5 May 2016, 19:50 last edited by
        #3

        @kshegunov Hi. I meant like having a blank text file where you add the sections, keys and values. So something like:

        JSON file add section "USER" and add section "PREFERENCES"
        In the "USER" section add key "DOB_DAY" with initial value of "0".

        K 1 Reply Last reply 5 May 2016, 21:50
        0
        • M marlenet15
          5 May 2016, 18:54

          Is it possible to create a JSON file from scratch? I have been looking everywhere and I couldn't find any examples. I would like to create the example below. The reason is each user will have their own file and there could be many users.

          {
              "USER": {
                  "DOB_DAY": "0",
                  "DOB_MONTH": "0",
                  "DOB_YEAR": "0",
                  "FIRST_NAME": "name",
                  "GENDER": "gender",
                  "LAST_NAME": "last",
                  "MIDDLE_INITIAL": "mi",
              },
          
              "PREFERENCES": {
          	"USER_NAME": "username",
          	"COLOR": "color",
          	"CITY": "city",
              }
          }
          ? Offline
          ? Offline
          A Former User
          wrote on 5 May 2016, 20:39 last edited by
          #4

          @marlenet15 Hi! You can use the QJson classes for this, see: JSON support in Qt.

          P 1 Reply Last reply 5 May 2016, 22:07
          0
          • M marlenet15
            5 May 2016, 19:50

            @kshegunov Hi. I meant like having a blank text file where you add the sections, keys and values. So something like:

            JSON file add section "USER" and add section "PREFERENCES"
            In the "USER" section add key "DOB_DAY" with initial value of "0".

            K Offline
            K Offline
            kshegunov
            Moderators
            wrote on 5 May 2016, 21:50 last edited by
            #5

            @marlenet15
            I see, well there are several ways to do that. See for example @Wieland's suggestion, it's one of the better ways to manage JSON objects programmatically. Another possible thing you could do is to have a "template" file, as per my first post, and after reading that file to replace the placeholders with the actual values. It's a matter of preference and convenience mostly and what you want to do after you get the correct data. So as to the "placeholder approach" (the other one is well described within the documentation), you could use something along the lines of:

            QFile file("template.json").
            if (!file.open(QFile::ReadOnly | QFile::Text))
                ; // Don't forget to handle errors
            
            QTextStream in(&file);
            QString fileContents = in.readAll(); //< Read the whole file into a QString
            
            QStringList placeholders =  QStringList() << "%DOB_DAY%" << "%DOB_MONTH%"; // ... and so on
            QStringList data = QStringList() << "0" << "1"; // ... and so on
            
            Q_ASSERT(placeholders.size() == data.size());  // Make sure both lists are the same size
            for (qint32 i = 0, size = placeholders.size(); i < size; i++)
                fileContents.replace(placeholders[i], data[i]);
            

            This'd replace the placeholders in a file of this liking:

            {
                "USER": {
                    "DOB_DAY": "%DOB_DAY%",
                    "DOB_MONTH": "%DOB_MONTH%",
                    ...
                }
            }
            

            Do note, however, that this implementation is quite inefficient, so you're probably better off using what @Wieland sourced.

            Kind regards.

            Read and abide by the Qt Code of Conduct

            M 1 Reply Last reply 5 May 2016, 22:12
            1
            • ? A Former User
              5 May 2016, 20:39

              @marlenet15 Hi! You can use the QJson classes for this, see: JSON support in Qt.

              P Offline
              P Offline
              Paul Colby
              wrote on 5 May 2016, 22:07 last edited by
              #6

              @Wieland said:

              @marlenet15 Hi! You can use the QJson classes for this, see: JSON support in Qt.

              Just to demonstrate that option:

                  QJsonObject user;
                  user["DOB_DAY"] = 0;
                  user["DOB_MONTH"] = 0;
                  user["DOB_YEAR"] = 0;
                  user["FIRST_NAME"] = "name";
                  user["GENDER"] = "gender";
                  user["LAST_NAME"] = "last";
                  user["MIDDLE_INITIAL"] = "mi";
              
                  QJsonObject preferences;
                  preferences["USER_NAME"] = "username";
                  preferences["COLOR"] = "color";
                  preferences["CITY"] = "city";
              
                  QJsonObject jsonObject;
                  jsonObject["USER"] = user;
                  jsonObject["PREFERENCES"] = preferences;
              
                  QJsonDocument doc(jsonObject);
                  qDebug() << doc.toJson();
              

              Then you can write the output of doc.toJson() (a QByteArray) wherever you like, including to a file.

              In the above example, doc.toJson() produces:

              {
                  "PREFERENCES": {
                      "CITY": "city",
                      "COLOR": "color",
                      "USER_NAME": "username"
                  },
                  "USER": {
                      "DOB_DAY": 0,
                      "DOB_MONTH": 0,
                      "DOB_YEAR": 0,
                      "FIRST_NAME": "name",
                      "GENDER": "gender",
                      "LAST_NAME": "last",
                      "MIDDLE_INITIAL": "mi"
                  }
              }
              

              Note the USER/DOB_* properties are are JSON numbers, and not JSON strings. If you really wanted them to be strings (as per your OP example) then just wrap the 0 values in quotes (or QString, etc) in the source.

              Cheers.

              1 Reply Last reply
              3
              • K kshegunov
                5 May 2016, 21:50

                @marlenet15
                I see, well there are several ways to do that. See for example @Wieland's suggestion, it's one of the better ways to manage JSON objects programmatically. Another possible thing you could do is to have a "template" file, as per my first post, and after reading that file to replace the placeholders with the actual values. It's a matter of preference and convenience mostly and what you want to do after you get the correct data. So as to the "placeholder approach" (the other one is well described within the documentation), you could use something along the lines of:

                QFile file("template.json").
                if (!file.open(QFile::ReadOnly | QFile::Text))
                    ; // Don't forget to handle errors
                
                QTextStream in(&file);
                QString fileContents = in.readAll(); //< Read the whole file into a QString
                
                QStringList placeholders =  QStringList() << "%DOB_DAY%" << "%DOB_MONTH%"; // ... and so on
                QStringList data = QStringList() << "0" << "1"; // ... and so on
                
                Q_ASSERT(placeholders.size() == data.size());  // Make sure both lists are the same size
                for (qint32 i = 0, size = placeholders.size(); i < size; i++)
                    fileContents.replace(placeholders[i], data[i]);
                

                This'd replace the placeholders in a file of this liking:

                {
                    "USER": {
                        "DOB_DAY": "%DOB_DAY%",
                        "DOB_MONTH": "%DOB_MONTH%",
                        ...
                    }
                }
                

                Do note, however, that this implementation is quite inefficient, so you're probably better off using what @Wieland sourced.

                Kind regards.

                M Offline
                M Offline
                marlenet15
                wrote on 5 May 2016, 22:12 last edited by
                #7

                @kshegunov The problem is that the template needs to be used multiple times. In other words, I need to create several json files with that exact same templates since there could be many users.

                1 Reply Last reply
                0
                • P Offline
                  P Offline
                  Paul Colby
                  wrote on 5 May 2016, 22:15 last edited by
                  #8

                  @marlenet15 said:

                  The problem is that the template needs to be used multiple times.

                  Is the template something you define, or an existing file that you want to update / modify?

                  Where are you getting the values to populate the template(s) from?

                  M 1 Reply Last reply 5 May 2016, 22:23
                  1
                  • P Paul Colby
                    5 May 2016, 22:15

                    @marlenet15 said:

                    The problem is that the template needs to be used multiple times.

                    Is the template something you define, or an existing file that you want to update / modify?

                    Where are you getting the values to populate the template(s) from?

                    M Offline
                    M Offline
                    marlenet15
                    wrote on 5 May 2016, 22:23 last edited by
                    #9

                    @Paul-Colby I would rather have no template and be able to create the keys and values of the JSON file within Qt since I want a new JSON file to be created every time I have a new user.

                    1 Reply Last reply
                    0
                    • P Offline
                      P Offline
                      Paul Colby
                      wrote on 5 May 2016, 22:25 last edited by
                      #10

                      @marlenet15 said:

                      create the keys and values of the JSON file within Qt since I want a new JSON file to be created every time I have a new user.

                      So why not wrap up the code example above into a function, and call it whenever you get a new user? You can pass all of the new user's details into the function, and have it write to a filename specific to the user etc.

                      Is that the sort of thing you are meaning?

                      M 1 Reply Last reply 5 May 2016, 23:09
                      1
                      • P Paul Colby
                        5 May 2016, 22:25

                        @marlenet15 said:

                        create the keys and values of the JSON file within Qt since I want a new JSON file to be created every time I have a new user.

                        So why not wrap up the code example above into a function, and call it whenever you get a new user? You can pass all of the new user's details into the function, and have it write to a filename specific to the user etc.

                        Is that the sort of thing you are meaning?

                        M Offline
                        M Offline
                        marlenet15
                        wrote on 5 May 2016, 23:09 last edited by
                        #11

                        @Paul-Colby YES!! I can't believe I didn't see it. I guess I didn't read it carefully. Thank you!!!!

                        1 Reply Last reply
                        0

                        1/11

                        5 May 2016, 18:54

                        • Login

                        • Login or register to search.
                        1 out of 11
                        • First post
                          1/11
                          Last post
                        0
                        • Categories
                        • Recent
                        • Tags
                        • Popular
                        • Users
                        • Groups
                        • Search
                        • Get Qt Extensions
                        • Unsolved