gabs icon indicating copy to clipboard operation
gabs copied to clipboard

Selecting only inner fields

Open ghost opened this issue 3 years ago • 1 comments

Hi,

Given the JSON below, you'll notice there are 2 outer object 'etag' and 'Items' and a number of inner objects. My goal is to get rid of the outer object so each inner gets broken down on its own. Is this possible using the gabs utility?

Given JSON:

{
  "etag": "\"098f6bcd4621d373cade4e832627b4f6\"",
  "items": [
    {
      "actor": {
        "email": "[email protected]",
        "profileId": "1111111"
      },
      "etag": "\"c4ca4238a0b923820dcc509a6f75849b\"",
      "events": [
        {
          "name": "edit",
          "parameters": [
            {
              "boolValue": true,
              "name": "primary_event"
            },
            {
              "name": "doc_id",
              "value": "randomID1"
            },
            {
              "name": "doc_type",
              "value": "spreadsheet"
            },
            {
              "name": "doc_title",
              "value": "Document1"
            },
            {
              "name": "owner",
              "value": "[email protected]"
            }
          ],
          "type": "access"
        }
      ],
      "id": {
        "applicationName": "drive",
        "customerId": "aaaaabbbb",
        "time": "2022-01-26T19:11:33.213Z",
        "uniqueQualifier": "1111111"
      },
      "ipAddress": "127.0.0.1",
      "kind": "admin#reports#activity"
    },
    {
      "actor": {
        "email": "[email protected]",
        "profileId": "222222"
      },
      "etag": "\"c81e728d9d4c2f636f067f89cc14862c\"",
      "events": [
        {
          "name": "edit",
          "parameters": [
            {
              "boolValue": true,
              "name": "primary_event"
            },
            {
              "name": "doc_id",
              "value": "randomID2"
            },
            {
              "name": "doc_type",
              "value": "spreadsheet"
            },
            {
              "name": "doc_title",
              "value": "Document2"
            },
            {
              "name": "owner",
              "value": "[email protected]"
            }
          ],
          "type": "access"
        }
      ],
      "id": {
        "applicationName": "drive",
        "customerId": "aaaaabbbb",
        "time": "2022-01-26T19:11:33.213Z",
        "uniqueQualifier": "1111111"
      },
      "ipAddress": "127.0.0.1",
      "kind": "admin#reports#activity"
    }
  ],
  "kind": "admin#reports#activities"
}

Desired outcome:

{
  "Event 1": {
    "actor": {
      "email": "[email protected]",
      "profileId": "222222"
    },
    "etag": "\"c81e728d9d4c2f636f067f89cc14862c\"",
    "events": [
      {
        "name": "edit",
        "parameters": [
          {
            "boolValue": true,
            "name": "primary_event"
          },
          {
            "name": "doc_id",
            "value": "randomID2"
          },
          {
            "name": "doc_type",
            "value": "spreadsheet"
          },
          {
            "name": "doc_title",
            "value": "Document2"
          },
          {
            "name": "owner",
            "value": "[email protected]"
          }
        ],
        "type": "access"
      }
    ],
    "id": {
      "applicationName": "drive",
      "customerId": "aaaaabbbb",
      "time": "2022-01-26T19:11:33.213Z",
      "uniqueQualifier": "1111111"
    },
    "ipAddress": "127.0.0.1",
    "kind": "admin#reports#activity"
  },
  "Event 2": {
    "actor": {
      "email": "[email protected]",
      "profileId": "222222"
    },
    "etag": "\"c81e728d9d4c2f636f067f89cc14862c\"",
    "events": [
      {
        "name": "edit",
        "parameters": [
          {
            "boolValue": true,
            "name": "primary_event"
          },
          {
            "name": "doc_id",
            "value": "randomID2"
          },
          {
            "name": "doc_type",
            "value": "spreadsheet"
          },
          {
            "name": "doc_title",
            "value": "Document2"
          },
          {
            "name": "owner",
            "value": "[email protected]"
          }
        ],
        "type": "access"
      }
    ],
    "id": {
      "applicationName": "drive",
      "customerId": "aaaaabbbb",
      "time": "2022-01-26T19:11:33.213Z",
      "uniqueQualifier": "1111111"
    },
    "ipAddress": "127.0.0.1",
    "kind": "admin#reports#activity"
  }
}

ghost avatar Jan 27 '22 11:01 ghost

Hey @BlueCanary-DM, thanks for raising this issue. Please try the following code and let me know if it needs any adjustments:

package main

import (
	"encoding/json"
	"fmt"
	"log"

	"github.com/Jeffail/gabs/v2"
)

const (
	jsonData = `{
		"etag": "\"098f6bcd4621d373cade4e832627b4f6\"",
		"items": [
		  {
			"actor": {
			  "email": "[email protected]",
			  "profileId": "1111111"
			},
			"etag": "\"c4ca4238a0b923820dcc509a6f75849b\"",
			"events": [
			  {
				"name": "edit",
				"parameters": [
				  {
					"boolValue": true,
					"name": "primary_event"
				  },
				  {
					"name": "doc_id",
					"value": "randomID1"
				  },
				  {
					"name": "doc_type",
					"value": "spreadsheet"
				  },
				  {
					"name": "doc_title",
					"value": "Document1"
				  },
				  {
					"name": "owner",
					"value": "[email protected]"
				  }
				],
				"type": "access"
			  }
			],
			"id": {
			  "applicationName": "drive",
			  "customerId": "aaaaabbbb",
			  "time": "2022-01-26T19:11:33.213Z",
			  "uniqueQualifier": "1111111"
			},
			"ipAddress": "127.0.0.1",
			"kind": "admin#reports#activity"
		  },
		  {
			"actor": {
			  "email": "[email protected]",
			  "profileId": "222222"
			},
			"etag": "\"c81e728d9d4c2f636f067f89cc14862c\"",
			"events": [
			  {
				"name": "edit",
				"parameters": [
				  {
					"boolValue": true,
					"name": "primary_event"
				  },
				  {
					"name": "doc_id",
					"value": "randomID2"
				  },
				  {
					"name": "doc_type",
					"value": "spreadsheet"
				  },
				  {
					"name": "doc_title",
					"value": "Document2"
				  },
				  {
					"name": "owner",
					"value": "[email protected]"
				  }
				],
				"type": "access"
			  }
			],
			"id": {
			  "applicationName": "drive",
			  "customerId": "aaaaabbbb",
			  "time": "2022-01-26T19:11:33.213Z",
			  "uniqueQualifier": "1111111"
			},
			"ipAddress": "127.0.0.1",
			"kind": "admin#reports#activity"
		  }
		],
		"kind": "admin#reports#activities"
	  }`
)

func main() {
	jsonObj, err := gabs.ParseJSON([]byte(jsonData))
	if err != nil {
		log.Fatalf("Failed to parse input JSON: %s", err)
	}

	outputObj := map[string]interface{}{}

	for idx, item := range jsonObj.Path("items").Children() {
		outputObj[fmt.Sprintf("Event %d", idx+1)] = item
	}

	out, err := json.MarshalIndent(outputObj, "", "  ")
	if err != nil {
		log.Fatalf("Failed to marshal output: %s", err)
	}

	fmt.Println(string(out))
}

mihaitodor avatar Jan 31 '22 12:01 mihaitodor