Leff7's avatar
Level 4

Php - creating json object

I am trying to create a json object from the data that I get from Ninja Forms that would look like this:

  {
    "title": "Contact Me",
    "fields": [{ "label": "Name",
                 "type": "textbox",
                 "required": "1" },
               { "label": "Email",
                 "type": "email",
                 "required": "1"
               }]
   }

I am trying to do so, like this:

$settings = ['label', 'type', 'required'];
$formTitle = Ninja_Forms()->form( 1 )->get()->get_setting('title');
$formFields = Ninja_Forms()->form(1)->get_fields();
$data = ['title' => $formTitle];

foreach ($formFields as $formField) {
  $key = $formField->get_setting('key');

  foreach ($settings as $setting) {
    $data['fields'][$key][][$setting] = $formField->get_setting($setting);
  }
}

return $data;

But, the result of that looks like this:

{
    "title": "Contact Me",
    "fields": {
        "name": [
            { "label": "Name" },
            { "type": "textbox" },
            { "required": "1"}
        ],
        "email": [
            { "label": "Email" },
            { "type": "email" },
            { "required": "1" }
        ],

How can I do this, so that the result looks like the one I have shown above?

0 likes
4 replies
bashy's avatar

Think you'll have to make fields an array first

$data['fields'][][$key][][$setting] = $formField->get_setting($setting);
Leff7's avatar
Level 4

Then, I get a result like this:

"fields": [
        {
            "name": [
                {
                    "label": "Name"
                }
            ]
        },
        {
            "name": [
                {
                    "type": "textbox"
                }
            ]
        },
        {
            "name": [
                {
                    "required": "1"
                }
            ]
        },
        {
            "email": [
                {
                    "label": "Email"
                }
            ]
        },
bashy's avatar

Ah then you don't need the key.

$data['fields'][][$setting] = $formField->get_setting($setting);
Leff7's avatar
Level 4

This gave me the wanted result:

foreach ($formFields as $formField) {
  $key = $formField->get_setting('key');

  foreach ($settings as $setting) {
    $object[$setting]  = $formField->get_setting($setting);
  }
  $data['fields'][] = $object;
}

return $data;
1 like

Please or to participate in this conversation.