PHP lendo json inválido com json_decode ();

Eu tenho dados json externos inválidos, sem aspas duplas em torno dos nomes.

Exemplo:

{
  data: [
    {
      idx: 0,
      id: "0",
      url: "http://247wallst.com/",
      a: [
        {
          t: "Title",
          u: "http://247wallst.com/2012/07/30/",
          sp: "About"
        }
      ],
      doc_id: "9386093612452939480"
    },
    {
      idx: 1,
      id: "-1"
    }
  ],
  results_per_page: 10,
  total_number_of_news: 76,
  news_per_month: [20, 0, 8, 1, 1, 2, 0, 2, 1, 0, 0, 1, 1, 0, 5, 1, 1, 1, 0, 2, 5, 16, 7, 1],
  result_start_num: 2,
  result_end_num: 2,
  result_total_articles: 76
}

Como você vê muitos nomes como dados, idx, id, url e outros não são citados em duplicidade, então isso torna este json inválido. Como posso tornar este json externo válido? Eu já tentei str_replace, substituindo '{' para '{"' e ':' para '":' adicionando aspas duplas em torno dos nomes sem aspas, mas isso atrapalha algumas variáveis ​​duplas já citadas.

Como posso fazer este json válido para que eu possa ler esses dados com o PHP json_decode? Eu não estou muito familiarizado com preg_replace ..

Json válido será parecido com:

{
  "data": [
    {
      "idx": 0,
      "id": "0",
      "url": "http://247wallst.com/",
      "a": [
        {
          "t": "Title",
          "u": "http://247wallst.com/2012/07/30/",
          "sp": "About"
        }
      ],
      "doc_id": "9386093612452939480"
    },
    {
      "idx": 1,
      "id": "-1"
    }
  ],
  "results_per_page": 10,
  "total_number_of_news": 76,
  "news_per_month": [20, 0, 8, 1, 1, 2, 0, 2, 1, 0, 0, 1, 1, 0, 5, 1, 1, 1, 0, 2, 5, 16, 7, 1],
  "result_start_num": 2,
  "result_end_num": 2,
  "result_total_articles": 76
}

Por favor me sugerir alguma função preg_replace php.

Fonte de dados:http://www.google.com/finance/company_news?q=aapl&output=json&start=1&num=1

questionAnswers(2)

yourAnswerToTheQuestion