title: How to Change Field names of json object arrays
body: <p>So I have a project with lots of incoming data about 15 sources in total, of course there are inconsistencies in how each label there data available in their rest api's. I need to Change some of their field names to be consistent with the others, but I am at a loss on how to do this when the data sources are json object arrays. A working example of what I am trying to do is found here <a href="https://play.golang.org/p/GWKO7u53WL" rel="nofollow noreferrer">playground</a> and below</p>
  
  <p>however I seem to lack the knowledge as to how to make this work when the data is not a single json object , but instead and array of objects that I am unmarshaling.</p>
  
  <p>Another approach is using Maps like in this <a href="https://play.golang.org/p/TabSga4i17" rel="nofollow noreferrer">example</a> but the result is the same, works great as is for single objects, but I can not seem to get it to work with json object arrays. Iteration through arrays is not a possibility as I am collecting about 8,000 records every few minutes.</p>
  
  <pre><code>package main
  
  import (
      "encoding/json"
      "os"
  )
  
  type omit bool
  
  type Value interface{}
  
  type CacheItem struct {
      Key    string `json:"key"`
      MaxAge int    `json:"cacheAge"`
      Value  Value  `json:"cacheValue"`
  }
  
  func NewCacheItem() (*CacheItem, error) {
      i := &amp;CacheItem{}
      return i, json.Unmarshal([]byte(`{
        "key": "foo",
        "cacheAge": 1234,
        "cacheValue": {
          "nested": true
        }
      }`), i)
  }
  
  func main() {
      item, _ := NewCacheItem()
  
      json.NewEncoder(os.Stdout).Encode(struct {
          *CacheItem
  
          // Omit bad keys
          OmitMaxAge omit `json:"cacheAge,omitempty"`
          OmitValue  omit `json:"cacheValue,omitempty"`
  
          // Add nice keys
          MaxAge int    `json:"max_age"`
          Value  *Value `json:"value"`
      }{
          CacheItem: item,
  
          // Set the int by value:
          MaxAge: item.MaxAge,
  
          // Set the nested struct by reference, avoid making a copy:
          Value: &amp;item.Value,
      })
  }
  </code></pre>